一、类的继承
一种在保持对象差异性的同时共享对象相似性的复用。
基类(父类、超类),子类(派生类)
// 继承关系用的是extends,关键字左侧是子类,右侧是父类
//子类又叫派生类,父类又叫基类和超类
public class Student extends Person {
public static void main(String[] args) {
Student s = new Student();
// 父类中用private修饰的属性和方法,属于父类中独有的属性和方法
//是不允许被继承的
// System.out.println(s.age);
// 不同包下,子类中,通过继承可以访问由public和protected修
//饰的属性和方法,但是不能访问private和默认的权限修饰符修饰的成员
System.out.println(s.age);
System.out.println(s.name);
}
}
class Person extends Person01 {
int age;
String name;
public void work() {
System.out.println("赚钱养家");
}
}
class Person01{
int number;
double score;
}
二、方法的重写(覆写,覆盖)
编写的规则
· 必须有继承,子类才能重写父类的方法
· 重写方法与被重写方法:
· 方法名称相同\
· 参数个数、类型、顺序相同
· 返回类型一致或是协变返回类型
· 协变返回类型:
· private修饰的方法不能被重写
· 子类方法不能缩小父类方法的访问权限
· 非静态方法不能被static修饰的方法重写
· static修饰的方法不能被重写,但static修饰的变量和方法都可以被屏蔽
public class Student01 extends Person02 {
// 当父亲的方法不能满足子类的时候,我们可以通过方法重写进行解决
// 方法重写的条件是
// 1.子类和父类进行继承
// 2.方法名相同
// 3.参数的类型、顺序、个数完全一致
// 4.返回值类型一致或者可协变(子类)
public static void main(String[] args) {
Student01 s = new Student01();
s.work();
}
}
class Person02{
public void work() {
System.out.println("赚钱养家");
}
}
重写和重载的比较
相同点:
· 方法名相同
不同点:
· 使用条件
· 方法重写必须有继承,在子类中重写\
· 方法重载在同一个类中\
·
三、super关键字
代表本类继承的直接父类当前的对象
用法:
public class Student2 extends Person2{
String name = "小张";
// 子类构造方法会默认调用父类中的构造方法,且只能是无参构造方法
Student2(){
// 子类能默认调用父类的构造方法是因为编译器默认帮我们加了一个
//super();
// 父类中没有无参的构造方法,那么子类中要去显示调用父类中的构造
// 方法,否则编译报错
// super的第一种用法,可以在子类的构造方法中调用父类的构造方法
super(10);
System.out.println("子类的构造方法");
// super的第二种用法,当子类跟父类同名时,子类中的属性和方法会将
//父类中的属性或方法屏蔽掉,我们可以利用super关键字调用父类中的成员
System.out.println(super.name);
}
public static void main(String[] args) {
Student2 s = new Student2();
}
}
class Person2{
String name = "张三";
// 父类中的构造方法属于父类独有的,不能被子类继承
Person2(int i){
System.out.println("父类中的构造方法");
}
}
四、final关键字
· final继承的类不能被继承,因此没有子类
· final修饰的方法不能被重写
· private、static修饰的方法不能被重写,默认为final修饰