
饺子泡牛奶
V1
2022/03/27阅读:44主题:橙心
继承与多态
一、关于继承
-
什么是继承?
继承(inheritance):它是Java程序设计中的一项核心技术。它的基本思想是可以
基于已有的类创建新的类
,继承已存在的类就是复用
这些类的方法
,而且可以增加
一些新的方法和字段
,使类能够适应新的情况。
-
如何使用继承?
关键字
extends
表示继承,表明正在构造的新类派生与一个已存在的类。
-
类、超类和子类
-
已存在的类被称为
超类
、基类
或父类
。 -
新类被称为
子类
、派生类
或孩子类
。 -
子类
比超类拥有的功能更多
。
二、继承的实现
-
超类实现:
/* *
* 定义一个超类,有自己的方法和字段。
*/
public class Parent {
String name = "parent";
public String getName() {
return this.name;
}
}
-
子类继承:
/* *
* 定义一个子类,使用extends关键字继承超类。
* 子类有自己的特有实现。
* 在子类方法中实现调用超类方法。
*/
public class Child extends Parent {
public void getParentName(){
// 调用超类getName()方法
System.out.println(getName());
}
public static void main(String[] args) {
Child child = new Child();
child.getParentName();
// print "parent"
}
}
-
super
关键字:
/* *
* 定义一个超类,有自己的方法。
*/
public class Parent {
public void hobby() {
System.out.println("sing");
}
}
/* *
* 定义一个子类,使用extends关键字继承超类。
* 在子类中,重写超类已有方法。
* 使用super关键字调用超类方法。
*/
public class Child extends Parent {
@Override
public void hobby() {
System.out.println("run");
}
public void getParentHobby() {
// 显式调用超类方法
super.hobby();
}
public static void main(String[] args) {
Child child = new Child();
// 调用重写超类的方法
child.hobby();
child.getParentHobby();
// print run sing
}
}
-
注意事项:
-
super
不是一个对象的引用,它只是一个指示编译器调用超类方法的特殊关键字。 -
使用
super
调用构造器的语句必须是子类构造器的第一条语句。 -
Java
不支持多重继承
。 -
在覆盖一个方法的时候,子类方法
不能低于
超类方法的可见性。
-
三、关于多态
-
什么是多态?
多态(polymorphism):一个对象变量可以指示多种实际类型的现象称为
多态
。即同一个行为具有多个不同表现形式或形态的能力。
-
如何使用多态?
-
前提:必须有
继承关系
。 -
格式:
超类类型 变量名 =
new
子类类型( );
四、多态的实现
-
超类实现:
/* *
* 定义一个超类,有自己的成员变量及方法
*/
public class People {
String name = "people";
public void eat() {
System.out.println("吃饭");
}
}
-
子类实现:
/* *
* 定义一个子类,使用extends关键字继承超类。
* 在子类中,重写超类已有方法。
* 子类有自己特有的成员变量及方法。
*/
public class Student extends People {
String name = "student";
@Override
public void eat() {
System.out.println("学生爱吃汉堡");
}
public void study() {
System.out.println("学习");
}
}
-
多态使用:
/* *
* 使用向上及向下转型调用超类方法。
*/
public class Sample {
public static void main(String[] args) {
// 多态本身就是向上转型过的过程。
// 1. 向上转型格式:超类类型 变量名=new 子类类型();
// 适用场景:超类的功能就能完成相应的操作。
People student = new Student();
System.out.println(student.name);
// print people
// 注意:在使用多态后的超类引用变量调用方法时,会调用子类重写后的方法。
student.eat();
// 学生爱吃汉堡
// 2. 向下转型格式:子类类型 变量名=(子类类型) 超类类型的变量;
// 适用场景:当要使用子类特有功能时,使用向下转型。
Student student1 = (Student) student;
System.out.println(student1.name);
// print student
student1.study();
// print 学习
}
}
-
多态解析过程:
在运行时能够自动地选择适当的方法,称为
动态绑定
。
-
首先,虚拟机获取实际类型的方法表;
-
接下来,虚拟机查找
签名
的类; -
最后,虚拟机调用这个方法。
五、继承设计技巧
-
将公共操作和字段放在超类中。
-
不要使用
protected
关键字修饰字段:由于子类集合
是无限制
的,任何派生的子类都能访问,并且同一个包的类
都能访问该修饰符的字段,从而破坏了封装性
。 -
使用继承实现
“is-a”
的关系。 -
除非所有
继承的方法都有意义
,否则不要使用继承。 -
在覆盖方法时,
不要改变预期的行为
。 -
使用多态,不要使用类型信息。(使用多态或接口实现的代码比使用多个类型检测的代码更
易于维护和拓展
。)
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。
作者介绍

饺子泡牛奶
V1