定义
? 就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
好处
extends 关键字,可以声明一个子类继承另外一个父类
class 父类 {
...
}
class 子类 extends 父类 {
...
}
? 成员变量不重名无影响,子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this 。
使用格式:
super.父类成员变量名
代码
class Fu {
// Fu中的成员变量。
int num = 6;
}
class Zi extends Fu {
// Zi中的成员变量
int num = 9;
public void show(){
//访问子类的sum
System.out.println(sum);
//访问子类的sum
System.out.println(this.sum);
//访问父类的sum
System.out.println(super.sum);
}
}
class ExtendsDemo03 {
public static void main(String[] args) {
// 创建子类对象
Zi z = new Zi();
// 调用子类中的show方法
z.show();
}
}
//运行结果为 996
? 成员方法不重名无影响,如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
果,也称为重写或者复写。声明不变,重新实现。
而进行扩展增强。
public class Fu {
//Fu类的成员方法
public void show(){
System.out.println("fu");
}
}
public class Zi extends Fu{
//Zi类的成员方法
public void show(){
//沿袭父类方法
super.show();
//重新实现
System.out.println("zi");
}
}
public class Demo02 {
public static void main(String[] args) {
// 创建子类对象
Zi zi = new Zi();
// 调用子类中的show方法
zi.show();
}
}
? 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。
? 我们把没有方法主体的方法称为抽象方法,包含抽象方法 的类就是抽象类
抽象方法
? 使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
定义格式:
修饰符 abstract 返回值类型 方法名 (参数列表);
抽象类
? 如果一个类包含抽象方法,那么该类必须是抽象类。
定义格式:
abstract class 类名字 {
}
? 继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父 类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
代码
public abstract class Fu {
public abstract void show();
}
public class Zi extends Fu{
@Override
public void show() {
System.out.println("zi");
}
}
public class Demo03 {
public static void main(String[] args) {
Zi zi = new Zi();
zi.show();
}
}
参考资料:
? 《Java教程零基础入门到精通IDEA版》黑马程序员
原文:https://www.cnblogs.com/masahiko/p/15041775.html