- 浏览: 11605 次
- 性别:
- 来自: 南京
最新评论
继承
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。
子类继承父类的域
当子类继承了某个类之后,便可以使用父类中的域,但是并不是完全继承父类的所有域。具体的原则如下:
能够继承父类的public和protected域;不能够继承父类的private域;
对于父类的包访问权限域,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类域,如果在子类中出现了同名称的域,则会发生隐藏现象,即子类的域会屏蔽掉父类的同名域。如果要在子类中访问父类中同名域,需要使用super关键字来进行 引用。
子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对域和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
构造器
子类是不能继承父类的构造器的。
调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
在子类中声明一个与父类完全相同的方法,重载机制能正常执行,当要覆盖父类方法时,建议使用@Override注解。它会在你不小心重载了父类方法时给出错误提示。
继承--is a,尽量慎用继承,多用组合;如果必须向上转型,则继承时必须的;否则,就应该好好考虑是否需要继承。
组合--has a
向上转型
由子类转型成父类,在继承图上是向上移动的,因此成为向上转型。
由于子类是父类的一个超级,它只可能比父类拥有更多的方法,所以向上转型总是安全的。所以编译器总是支持向上转型。
举例:
class Instrument {
static void play() {}
static void tune(Instrument i) {
//...
i.play();
}
}
public Wind extends Instrument {
public static void main(String[] args) {
Wind flute = new Wind();
Instrument.tune(flute);//向上转型
}
}
多态
多态,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
在java中表现为,程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。
java中实现多态的机制:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,动态绑定。
在java中除了static和final以外,其它的方法都是动态绑定。private方法,域,静态方法方法不是多态的,
协变返回类型
在java5中添加了协变返回类型,它表示在子类中的被覆盖的方法可以返回父类方法的返回值类型的某个子类。
向下转型
向下转型也就是在继承层次中向下移动,这样就可以获取更多的信息。
当使用父类或接口定义的引用指向子类或具体实现类对象时,该引用只能调用父类或者接口中的方法,对于子类或者实现类中特有的方法是不能调用的。当需要使用子类或者实现类中特有的方法时,就需要向下转型。如果转型是正确的,那么转型成功;否则,就会返回一个ClassCastException。
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。
子类继承父类的域
当子类继承了某个类之后,便可以使用父类中的域,但是并不是完全继承父类的所有域。具体的原则如下:
能够继承父类的public和protected域;不能够继承父类的private域;
对于父类的包访问权限域,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类域,如果在子类中出现了同名称的域,则会发生隐藏现象,即子类的域会屏蔽掉父类的同名域。如果要在子类中访问父类中同名域,需要使用super关键字来进行 引用。
子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对域和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
构造器
子类是不能继承父类的构造器的。
调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
在子类中声明一个与父类完全相同的方法,重载机制能正常执行,当要覆盖父类方法时,建议使用@Override注解。它会在你不小心重载了父类方法时给出错误提示。
继承--is a,尽量慎用继承,多用组合;如果必须向上转型,则继承时必须的;否则,就应该好好考虑是否需要继承。
组合--has a
向上转型
由子类转型成父类,在继承图上是向上移动的,因此成为向上转型。
由于子类是父类的一个超级,它只可能比父类拥有更多的方法,所以向上转型总是安全的。所以编译器总是支持向上转型。
举例:
class Instrument {
static void play() {}
static void tune(Instrument i) {
//...
i.play();
}
}
public Wind extends Instrument {
public static void main(String[] args) {
Wind flute = new Wind();
Instrument.tune(flute);//向上转型
}
}
多态
多态,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
在java中表现为,程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。
java中实现多态的机制:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,动态绑定。
在java中除了static和final以外,其它的方法都是动态绑定。private方法,域,静态方法方法不是多态的,
协变返回类型
在java5中添加了协变返回类型,它表示在子类中的被覆盖的方法可以返回父类方法的返回值类型的某个子类。
向下转型
向下转型也就是在继承层次中向下移动,这样就可以获取更多的信息。
当使用父类或接口定义的引用指向子类或具体实现类对象时,该引用只能调用父类或者接口中的方法,对于子类或者实现类中特有的方法是不能调用的。当需要使用子类或者实现类中特有的方法时,就需要向下转型。如果转型是正确的,那么转型成功;否则,就会返回一个ClassCastException。
发表评论
-
Java中的四种引用
2018-03-22 15:12 4391、强引用(Strong Referen ... -
java中try、catch、finally中含有return的简单总结
2017-06-01 14:24 516try语句在返回前,将其他所有的操作执行完,保留好要返回的值 ... -
java泛型总结
2016-04-20 13:26 331泛型(generic):是指参数化类型的能力。可以定义泛型类 ... -
对象的序列化与反序列化
2016-04-18 10:22 451序列化:把对象转换为字节序列的过程 反序列化:把字节序列恢 ... -
覆盖hashCode方法
2016-04-15 13:44 547覆盖hashCode方法规约: ... -
通用equals方法
2016-04-14 17:50 4631.1 equals方法 覆盖equals方法必须遵守的 ... -
java对象的创建建议
2016-04-14 16:39 3181.1 考虑用静态工厂方法代替构造器 示例: publi ... -
枚举类型
2016-04-06 15:50 01.1 基本enum特性 public e ... -
String深入理解
2016-04-05 15:33 412String对象是不可变的,每个看起来会修改String对象 ... -
java内部类详解
2016-04-01 15:59 421内部类 可以将一个类 ... -
理解java中的抽象类与接口
2016-03-31 21:42 400抽象方法:仅有声明没 ... -
面向对象四大基本特征
2016-03-31 14:48 394抽象: 抽象就是找出一 ... -
java回调机制
2016-03-31 09:56 375所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调 ... -
jdk动态代理
2016-03-30 17:28 381代理模式: 为其他对象提供一种代理,并以控制对这个对象的访问。 ... -
final和static浅析
2016-03-30 10:47 258final 通常代表“这是无法改变的”。 一般使用到final ... -
java数据存储
2016-03-28 22:42 308Java中数据存储区域包括: 1.寄存器:最快的存储区,由编 ... -
java访问控制权限
2016-03-28 22:34 338java访问控制权限:private,protected,包 ... -
java基本类型
2016-03-28 22:31 281基本类型 java确定了每种基本类型的存储空间大小 基本类型 ... -
Java7语法新特性
2016-03-11 15:17 269转自:http://uuhorse.iteye.com/blo ...
相关推荐
java 继承与多态应用 输出员工信息java 继承与多态应用 输出员工信息 代码实例
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
Java继承与多态实验报告.doc
java继承和多态PPT教案学习.pptx
java继承与多态PPT教案学习.pptx
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
java继承、多态的简单程序,适合初学者参考,配套Bin_0902的博客使用
java 继承和多态PPT教程
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
类与类属性:Employee: firstName,lastName,socialSecurityNumber SalaridEmployee: weeklySalary(周薪) HourlyEmployee: wage(每小时的工钱),hours(月工作小时数) CommisionEmployee: grossSales(销售额),...
java学习资料—Java继承和多态;java学习资料—Java继承和多态;java学习资料—Java继承和多态;java学习资料—Java继承和多态;java学习资料—Java继承和多态;java学习资料—Java继承和多态;java学习资料—Java...
java封装 继承与多态 程序设计 类与对象
java基础_继承封装 多态,概念的梳理,对初学者很有帮助,看一遍就清楚了
主要介绍了Java 继承与多态的深入理解的相关资料,子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为,需要的朋友可以参考下
1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。
Java(继承与多态)
JAVA封装继承与多态PPT教案学习.pptx
西南科技大学Java程序设计与实践 实验三 类的继承与多态的应用 一、实验目的: 1、练习类的继承与多态设计过程; 2、练习面向对象的图形用户界面设计、事件设计方法。 二、实验内容: 1、利用多态性编程,创建一个 ...