继承(Inheritance):一个类可以继承另一个类的属性和方法(不支持多继承),这个被继承的类称为父类(或超类、基类),继承它的类称为子类(或派生类)。
关键字:extends
public class Parent {
}
public class Son extends Parent {
}
访问控制
public:公共成员,任何类都可以访问。
protected:受保护成员,子类和同一个包内的类可以访问。
default(无修饰符):包私有成员,同一个包内的类可以访问。
private:私有成员,只有类本身可以访问,子类不能直接访问,但可以通过父类的内置函数间接修改。
public class Parent {
public String name;
protected char sex;
String address;
private int age;
public void setAge(int age){
this.age = age;
}
@Override//重写一下便于打印操作
public String toString() {
return "Parent{" +
"name='" + name + '\'' +
", sex=" + sex +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
public class Son extends Parent {
Son(){
name = "abc";
sex = 'M';
address = "kkk";
// age = 18;
setAge(18);
}
}
方法重写(Override)
方法重写:子类可以重写父类的方法,使用相同的方法名、参数和返回类型。
@Override 注解:用于标记一个方法是重写父类的方法,增强代码的可读性和可靠性。
public class Parent {
public void print(){
System.out.println("hello");
}
}
public class Son extends Parent {
@Override
public void print() {
System.out.println("你好");
}
}
super关键字
访问父类成员:子类可以使用 super 关键字来访问父类的成员(属性和方法)。
调用父类构造方法:子类构造方法中可以使用 super() 调用父类的构造方法。
public class Parent {
int age = 2;
}
public class Son extends Parent {
int age = 1;
Son(){
super(2);//只能在子类构造器中使用,且必须放在构造器的第一行
}
public void print(){
int age = 0;
System.out.println(age);//0 就近原则
System.out.println(this.age);//1 本类
System.out.println(super.age);//2 父类
}
}