- 浏览: 12846 次
- 性别:
- 来自: 南京
最新评论
继承
在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 4801、强引用(Strong Referen ... -
java中try、catch、finally中含有return的简单总结
2017-06-01 14:24 552try语句在返回前,将其他所有的操作执行完,保留好要返回的值 ... -
java泛型总结
2016-04-20 13:26 372泛型(generic):是指参数化类型的能力。可以定义泛型类 ... -
对象的序列化与反序列化
2016-04-18 10:22 489序列化:把对象转换为字节序列的过程 反序列化:把字节序列恢 ... -
覆盖hashCode方法
2016-04-15 13:44 604覆盖hashCode方法规约: ... -
通用equals方法
2016-04-14 17:50 5111.1 equals方法 覆盖equals方法必须遵守的 ... -
java对象的创建建议
2016-04-14 16:39 3561.1 考虑用静态工厂方法代替构造器 示例: publi ... -
枚举类型
2016-04-06 15:50 01.1 基本enum特性 public e ... -
String深入理解
2016-04-05 15:33 467String对象是不可变的,每个看起来会修改String对象 ... -
java内部类详解
2016-04-01 15:59 465内部类 可以将一个类 ... -
理解java中的抽象类与接口
2016-03-31 21:42 443抽象方法:仅有声明没 ... -
面向对象四大基本特征
2016-03-31 14:48 430抽象: 抽象就是找出一 ... -
java回调机制
2016-03-31 09:56 416所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调 ... -
jdk动态代理
2016-03-30 17:28 433代理模式: 为其他对象提供一种代理,并以控制对这个对象的访问。 ... -
final和static浅析
2016-03-30 10:47 299final 通常代表“这是无法改变的”。 一般使用到final ... -
java数据存储
2016-03-28 22:42 344Java中数据存储区域包括: 1.寄存器:最快的存储区,由编 ... -
java访问控制权限
2016-03-28 22:34 371java访问控制权限:private,protected,包 ... -
java基本类型
2016-03-28 22:31 316基本类型 java确定了每种基本类型的存储空间大小 基本类型 ... -
Java7语法新特性
2016-03-11 15:17 299转自:http://uuhorse.iteye.com/blo ...
相关推荐
Java继承与多态知识点 Java继承与多态是面向对象编程语言的重要概念,本文将对Java继承与多态进行详细的介绍和解释。 一、继承的含义 继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一...
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
Java继承与多态实验报告.doc
内容概要:本文档详尽介绍了Java继承和多态的基本概念及综合应用。涵盖Java继承的基础,如关键字extends与super的使用、构造函数继承及方法重写等;还探讨了Java多态的特点,如方法重载与重写、向上转型与向下转型的...
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
本篇文章将围绕Java继承和多态机制的深入讲解,探索它们是如何促进代码的灵活性和扩展性的。 ### 继承机制 继承,作为面向对象编程的基石之一,允许我们将一个类的属性和行为传递给另一个类,从而实现代码的复用。...
这个压缩包"java继承、多态的简单程序.zip"显然包含了一些示例代码,旨在帮助初学者理解这两个概念。接下来,我们将深入探讨Java中的继承和多态性。 ### 继承(Inheritance) 在Java中,继承允许一个类(子类)...
在Java编程语言中,继承和多态是面向对象编程的核心概念。这个代码实例主要展示了如何利用这些特性来处理员工信息的输出。以下是关于这个主题的详细解释。 **继承(Inheritance)** 继承允许一个类(子类)继承另一...
java 继承和多态PPT教程
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
类与类属性:Employee: firstName,lastName,socialSecurityNumber SalaridEmployee: weeklySalary(周薪) HourlyEmployee: wage(每小时的工钱),hours(月工作小时数) CommisionEmployee: grossSales(销售额),...
内容概要:本文详细介绍了Java编程中继承和多态的概念及其应用,涵盖从基础到进阶的内容,包括继承的基本概念、super关键字的应用、方法重载与重写、instanceof关键字的作用以及继承与多态的具体示例。 适合人群:...
java封装 继承与多态 程序设计 类与对象
java 学习-java继承和多态之接口 学习-java继承和多态之接口 学习-java继承和多态之接口 学习-java继承和多态之接口 学习-java继承和多态之接口
java 练习-java继承和多态之综合练习 练习-java继承和多态之综合练习 练习-java继承和多态之综合练习 练习-java继承和多态之综合练习 练习-java继承和多态之综合练习