继承是面向对象编程的三大特性之一。主要功能是在原有的基础上进行扩展。若果没有继承,那么代码将会出现大量重复。
继承的实现:通过extends关键字
class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal {
public Cat(String name) {
// 使用 super 调用父类的构造方法.
super(name);
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void fly() {
System.out.println(this.name + "正在飞");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat("小黑");
cat.eat("猫粮");
Bird bird = new Bird("圆圆");
bird.fly();
}
}
特点:
子类会继承父类所有的public属性/方法
父类private修饰的字段/方法,子类中是无法访问的。
子类继承父类后,在构造方法中,需要先构造父类(没有父类,又怎么会产生字类,所以要先构造父类),如果父类的构造方法是有参数的,需要通过super()来显示调用。如果父类的构造方法是无参的,那么可以不用super(),子类会自动隐式调用父类无参的构造方法。
java不支持多继承,一个类只能有一个父类。
class A {
public int m=5;
}
class B extends A{
public int m=10;
public void show(){
System.out.println("子类"+m);
System.out.println("父类"+super.m);//通过super.属性 访问
}
}
public class TestDemo{
public static void main(String[] args) {
A a = new B();
System.out.println(a.m);
B b = new B();
System.out.println(b.m);
System.out.println("=====子类当中如何访问,父类中的数据成员======");
b.show();
}
}
运行结果:
Fu f=new Zi();
打印f时会打印父类的f,取决于左边的时父类还是子类。
在子类中访问父类属性需要通过super来访问