继承
继承特性
1. 子类拥有父类非private的属性,方法
2. 子类可以拥有自己的属性和方法
3. 子类可以用自己的方式实现父类的方法
4. 单继承,可以多重继承
继承关键字
extends
//父类
class Animal2{
private String name;
private int age;
public Animal2 (String n,int a) {
this.name = n;
this.age = a;
}
public void hello() {
System.out.println("你好,我是 "+name);
}
}
//子类
class Dog2 extends Animal2{ //继承使用extends关键字
public Dog2(String n,int a){
super(n,a);
}
}
implements
implements关键字可以变相使Java具有多继承的特性,使用范围为类继承接口的情况,一个类可以同时继承多个接口
public interface A {
public void eat();
}
public interface B {
public void show();
}
public class C implements A,B {
public void eat(){ }
public void show(){}
}
super与this
super关键字用来实现对父类成员的访问,引用当前对象的父类,this关键字指向自己的引用
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 调用自己的方法 super.eat(); // super 调用父类方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
final
用final关键字声明类,该类不能被继承;声明方法,该方法不能被子类重写
若实例变量被声明为final,这个变量就不能被修改。被声明为final类的方法自动被声明为final,但实例变量不是final
构造器
子类不能继承父类的构造器,如果父类的构造器有参数,必须在子类的构造器中显示的通过super关键字调用父类构造器,并带有适当的参数列表
public class SuperClass {
private int age;
public SuperClass(int age){
this.age = age;
System.out.println("SuperClass:"+this.age);
}
}
public class SubClass extends SuperClass {
private int age;
public SubClass(int age){
super(5);
this.age = age;
System.out.println("sbuclass:"+this.age);
}
public static void main(String[] args) {
SubClass s = new SubClass(2);
}
}