继承

继承是从已有的类里派生出新类。继承可以避免很多重复的代码。

被继承的类叫做父类,派生的类叫做子类,子类和父类的关系是is a的关系,如父类是动物,子类是猫。那么猫继承了动物。猫是动物,但是动物不是猫。

子类拥有父类非private的属性和方法。

子类可以拥有自己的属性和方法,可以对父类的方法进行改写。

继承只能单继承,如子类B只能继承一个父类A。但是可以多重继承。如子类C继承父类B,父类B又可以继承父类C。

继承使用关键字extends

如:

//父类 ConstructorDemo

public class ConstructorDemo {
String name = “sandy”;
int age = 11;
}

//子类ConstructorDemoExtend
public class ConstructorDemoExtend extends  ConstructorDemo{
  
ConstructorDemoExtend (){}
    }
}

子类只能调用而不能继承父类的构造函数。子类需要在自己的构造函数中调用父类的构造函数。
初始化子类对象可以直接调用父类无参数的构造函数。
public class Father {
String name = "Father";
int age = 50;
Father(){
System.out.println("i am father");
}
}

public class SonClass extends Father{

SonClass(){
System.out.println("i am sonClass");
}

public static void main(String [] args){
SonClass sClass = new SonClass();
}
}
运行结果:

i am father
i am sonClass


调用父类有参数的构造函数必须通过super,而且必须写在子类构造器中的第一行代码
public class Father {
String name ;
int age;
Father(){
System.out.println("i am a constructor without parameter");
}
Father(String name){
this.name = name;
System.out.println("i am father");
System.out.println("name: "+name);
}
}

public class SonClass extends Father{


SonClass(){
super("Sandy");
System.out.println("i am sonClass");
}

public static void main(String [] args){
SonClass sClass = new SonClass();
}
}

运行结果:
System.out.println("name: "+name);

i am father
name: Sandy
i am sonClass

protected关键字

子类可以访问父类里protected修饰的属性和方法,但是不能访问private修饰的属性和方法

public class Father {
String name ;

protected void setName(String name){
this.name = name;
}

protected String getName(){
return name;
}
}
public class SonClass extends Father{

public static void main(String [] args){
SonClass sClass = new SonClass();
sClass.setName("wendy");
String myName = sClass.getName();
System.out.println(myName);
}
}
运行结果:
wendy







原文地址:https://www.cnblogs.com/xiaohai2003ly/p/7081670.html