java的三大特性,封装,继承,多态
封装
- /**
- * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用,
- * 被封装的成员只能通过某些特定的方式才能访问。
- * 实现封装有两个步骤:
- * 1、将不能暴露的成员隐藏起来,我们就不能让其在类的外部被直接访问或赋值。
- * 实现方法是将该成员定义为私有的,在成员定义前加上private访问权限修饰符。
- * 2、用公共方法来暴露对该隐藏成员的访问,可以给成员加上public修饰符,将该成员定义为公共的
- */
- package com.study.feature;
- /**
- *
- * @className :Package
- * @package : com.study.feature
- * @Description :封装性的测试
- * @author:lgf
- * @date :2012 三月 12 10:20:35
- * @version : 1.0
- */
- public class Package {
- // 使用private隐藏
- private String strValue;
- // 通过get和set进行访问
- public String getStrValue() {
- return this.strValue;
- }
- public void setStrValue(String strValue) {
- this.strValue = strValue;
- }
- }
继承
父类 ExtendsFather.java
- /**
- * 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
- * 对象的一个新类可以从现有的类中派生。
- * 1. 为什么要使用继承?
- * a.提高程序的扩展性。
- b.提高了代码的重用性。
- 2. 子类能继承到父类的那些方法和属性
- 第一种:所有的属性和方法都被子类继承到了。
- 第二种:
- a、子类和父类在同一个包下:
- 公有的受保护的属性和方法被子类继承到了。
- b、子类和父类不在同一个包下:
- 公有的方法和属性被子类继承到了。
- 3. 子类的对象能调用父类的那些方法和属性?
- a、子类和父类在同一个包下:
- 公有的受保护的属性和方法能被子类调用。
- b、子类和父类不在同一个包下:
- 公有的方法和属性能被子类调用。
- 在类和抽象类中,默认的就是受保护的。
- 在接口中,默认的就是公有的。
- */
- package com.study.feature;
- /**
- * 父类
- * @className :ExtendsFather
- * @package : com.study.feature
- * @Description :继承测试
- * @author:lgf
- * @date :2012 三月 12 10:33:02
- * @version : 1.0
- */
- public class ExtendsFather {
- // 定义不同四种修饰符的属性
- private String privateValue;
- protected String protectedValue;
- String defaultValue;
- public String publicValue;
- // 定义不同四种修饰符的方法
- private void privateFunction(){
- System.out.println("privateFunction");
- }
- protected void protectedFunction(){
- System.out.println("protectedFunction");
- }
- void defaultFunction(){
- System.out.println("defaultFunction");
- }
- public void publicFunction(){
- System.out.println("publicFunction");
- }
- }
同包下的子类 ExtendsChildrenSamePackage.java
- package com.study.feature;
- /**
- *
- *
- * @className :ExtendsChildrenSamePackage
- * @package : com.study.feature
- * @Description : 同一个包下面的继承关系
- * @author:lgf
- * @date :2012 三月 12 10:51:23
- * @version : 1.0
- */
- public class ExtendsChildrenSamePackage extends ExtendsFather{
- public static void main(String[] args) {
- ExtendsFather children = new ExtendsChildrenSamePackage();
- //children.privateValue = "no"; 无法访问到
- children.defaultValue = "ok";
- children.protectedValue = "ok";
- children.publicValue = "ok";
- //除了private修饰的方法,其他都继承到了
- //children.privateFunction();
- children.defaultFunction();
- children.protectedFunction();
- children.publicFunction();
- }
- }
不同包下的子类 ExtendsChildrenOtherPackage.java
- /**
- *
- */
- package com.study.featureSecond;
- import com.study.feature.ExtendsFather;
- /**
- *
- * @className :ExtendsChildrenOtherPackage
- * @package : com.study.featureSecond
- * @Description :不同包下面的继承关系
- * @author:lgf
- * @date :2012 三月 12 10:50:47
- * @version : 1.0
- */
- public class ExtendsChildrenOtherPackage extends ExtendsFather{
- public static void main(String[] args) {
- ExtendsFather children = new ExtendsChildrenOtherPackage();
- //children.privateValue = "no"; 无法访问到
- //children.defaultValue = "no"; 无法访问到
- //children.protectedValue = "no"; 无法访问到
- children.publicValue= "ok";
- //除了public修饰的方法,其他都未继承到了
- //children.privateFunction();
- //children.defaultFunction();
- //children.protectedFunction();
- children.publicFunction();
- }
- }
重载和重写 ExtendsOverRideLoad.java
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :ExtendsClass
- * @package : com.study.feature
- * @Description :重载和重写
- * @author:lgf
- * @date :2012 三月 12 11:00:35
- * @version : 1.0
- */
- public class ExtendsOverRideLoad extends ExtendsFather {
- @Override
- public void publicFunction() {
- //super.publicFunction(); 可以调用父类的方法
- System.out.println("Override publicFunction");
- }
- public void publicFunction(String str) {
- //super.publicFunction(); 可以调用父类的方法
- System.out.println("overload publicFunction");
- }
- public static void main(String[] args) {
- ExtendsFather child= new ExtendsOverRideLoad();
- //Override publicFunction
- child.publicFunction();
- //child.publicFunction("s"); 仅仅只能使用到父类有的方法,重载的方法无法调用
- ExtendsOverRideLoad childSecond = new ExtendsOverRideLoad();
- //Override publicFunction
- childSecond.publicFunction();
- //overload publicFunction
- childSecond.publicFunction("overLoad");
- }
- }
多态
父类 Animal.java
- /**
- * 1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的
- * 2. 构造方法是被隐式声明为static方法
- * 3. 动态绑定
- * 将一个方法调用和一个方法主体连接到一起称为绑定(Binding)。
- * 根据绑定的时机不同,可将绑定分为“早期绑定”和“后期绑定”两种。
- * 如果在程序运行之前进行绑定(由编译器和链接程序完成),称为早期绑定。
- * 如果在程序运行期间进行绑定,称为后期绑定,后期绑定也称为“动态绑定”或“运行时绑定”。
- * 在Java中,多态性是依靠动态绑定实现的,即Java虚拟机在运行时确定要调用哪一个同名方法。
- *
- * 4. 多态总结
- * 一、使用父类类型的引用指向子类的对象
- * 二、该引用只能调用父类中定义的方法和变量
- * 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,
- * 将会调用子类中的这个方法;(动态连接、动态调用)
- * 四、变量不能被重写(覆盖),”重写“的概念只针对方法,
- * 如果在子类中”重写“了父类中的变量,那么在编译时会报错。
- * 5. 多态详解 多态是通过:
- * 5.1 接口 和 实现接口并覆盖接口中同一方法的几不同的类体现的
- * 2 父类 和 继承父类并覆盖父类中同一方法的几个不同子类实现的.
- *
- * 6. 一个类型引用只能引用引用类型自身含有的方法和变量
- */
- package com.study.feature;
- /**
- * @className :Animal
- * @package : com.study.feature
- * @Description :多态的测试
- * @author:lgf
- * @date :2012 三月 12 13:50:36
- * @version : 1.0
- */
- public class Animal {
- public void eat(){
- System.out.println("eating");
- }
- }
多态实现
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :Cat
- * @package : com.study.feature
- * @Description :猫
- * @author:lgf
- * @date :2012 三月 12 13:54:01
- * @version : 1.0
- */
- public class Cat extends Animal{
- public void eat(){
- System.out.println("eating fish");
- }
- }
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :Dog
- * @package : com.study.feature
- * @Description :狗
- * @author:lgf
- * @date :2012 三月 12 13:55:38
- * @version : 1.0
- */
- public class Dog extends Animal{
- public void eat(){
- System.out.println("eating Bone");
- }
- }
结果
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :Main
- * @package : com.study.feature
- * @Description :多态测试
- * @author:lgf
- * @date :2012 三月 12 13:57:11
- * @version : 1.0
- */
- public class Main {
- public static void main(String[] args) {
- Animal animal = null;
- animal = new Animal();
- animal.eat();//eating
- Animal cat = new Cat();
- cat.eat();//eating fish
- Animal dog = new Dog();
- dog.eat();//eating Bone
- }
- }
例子2
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :Father
- * @package : com.study.feature
- * @Description :多态
- * @author:lgf
- * @date :2012 三月 12 14:53:41
- * @version : 1.0
- */
- public class Father {
- public void functionOne(){
- functionSecond();
- }
- public void functionSecond(){
- System.out.println("Father functionSecond");
- }
- }
- /**
- *
- */
- package com.study.feature;
- /**
- *
- * @className :Children
- * @package : com.study.feature
- * @Description :测试
- * @author:lgf
- * @date :2012 三月 12 14:55:15
- * @version : 1.0
- */
- public class Children extends Father{
- public void functionSecond(){
- System.out.println("Children functionSecond");
- }
- public static void main(String[] args) {
- Father c = new Children();
- c.functionOne();//Children functionSecond
- }
- }
java的三大特性,封装,继承,多态的更多相关文章
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- C++三大特性 封装 继承 多态
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- JAVA的三大特征 封装继承多态- 简单总结
简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- 初步理解Java的三大特性——封装、继承和多态
声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...
- Java 浅析三大特性之一继承
上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...
- Java的三大特性之继承
此处我会分为这几个部分来理解继承是怎么样的: 1.区分封装.继承和多态 2.区分限定词的范围 3.区分隐藏.覆盖.重载 4.继承的理解 5.一道面试题的原型 --------------------- ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
随机推荐
- ASP.NET Core实现类库项目读取配置文件
前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...
- vue1.0和vue2.0的区别(一)
今天我们来说一说vue1.0和vue2.0的主要变化有哪些 一.在每个组件模板,不在支持片段代码 VUE1.0是: <template> <h3>我是组件</h3> ...
- 用C语言模仿Python函数
首先得说明一点,C 语言不是函数式编程语言,要想进行完全的函数式编程,还得先写个虚拟机,然后再写个解释器才行(相当于 CPython ). 下面我们提供一个例子,说明 C 语言函数可以"适度 ...
- Linux环境下配置JDK,java环境
1.查看Linux自带的JDK是否已安装 # java -version 2. 查看JDK信息 # rpm -qa | grep java 显示: java-x.x.x-gcj-compat-x.x. ...
- SQL写操作 设置内容 (数组转字符串)
SQL写操作 设置内容 (数组转字符串) SQL set内容 SQL操作数组转字符串 SQL写操作 set内容 (数组转字符串) [ 封装方法 ] function getSqlSet( $data ...
- 移动端网页meta设置和响应式
苏宁易购WAP的meta分析 响应式 meta设置 媒体查询时读的width为viewport的宽度.viewport宽度为手机分辨率.比如note2 1280*720.需要重置为设备 640*360 ...
- Zepto源码分析-event模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...
- WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理--03
兼容问题目录 16.IE67下子级有相对定位,并且比父级要大.那父级overflow:hidden;后是包不住它的 17.IE6下同一层级的浮动元素会盖住绝对定位元素 18.IE6下定位父级的宽高是奇 ...
- 分清css的em和rem
在css中单位长度用的最多的是px.em.rem,这三个的区别是: px是固定的像素,一旦设置了就无法因为适应页面大小而改变. em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定 ...
- lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3
前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...