Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承使用关键词extends实现,Java继承分为单继承和多层继承。单继承是指一个子类最多只能有一个父类。多重继承是一个子类可以有二个以上的父类。Java一次只能继承一个父类。
单继承 | A extends B |
多层继承 | A extends B extends C |
Java没有多继承 | A extends B,C (这是错误的) |
案例讲解:
创建一个父类A
//创建父类
class A {//父类
public String i = 10;
public int sum() {
return getI() + 10;
}
public int sum1() {
return i + 10;
}
public int getI() {
return i;
}
}创建一个子类B继承父类A
class B extends A {//子类
public int i = 20;
public int sum() {
return i + 20;
}
public int sum1() {
return i + 10;
}
public int getI() {
return i;
}
}创建主方法,在主方法中分别调用sum()方法和sum1()方法
public static void main(String[] args) {
//编译看左边,运行看右边
A a = new B();//向上转型
System.out.println(a.sum());//40
System.out.println(a.sum1());//30
}
/*
结果解读:
对于sum()方法:编译看左边A,左边父类中有sum()方法;
运行看右边B,子类中也有sum()方法,
此时调用子类中的sum()方法,
结果为20+20=40;
同理,对于sum1()方法,结果为20+10=30。
*/将子类中sum()方法和sum1()方法注释:
class B extends A {//子类
public int i = 20;
public int getI() {
return i;
}
}继续在主方法中调用sum()和sum1()方法
public static void main(String[] args) {
//编译看左边,运行看右边
A a = new B();//向上转型
System.out.println(a.sum());//30
System.out.println(a.sum1());//20
}
/*
结果解读:
对于sum()方法:编译看左边A,左边父类中有sum()方法;
运行看右边B,子类中现在没有sum()方法,
在编译父类A中sum()方法时,发现其调用了getI()方法,
而根据Java的动态绑定机制(当调用对象方法的时候,该方法会和对象的内存地址/运行类进行绑定),
即此时调用的getI()方法是子类中的getI()方法,而不是父类中的getI()方法。
又因为属性没有动态绑定机制,哪里声明,哪里使用。即i的值为子类中i的值。
所以结果为20+10=30;同理,对于sum1()方法,结果为10+10=20。
*/ | 留言与评论(共有 0 条评论) “” |