方法的重写(覆盖),访问权限修饰符,super

方法的重写(覆盖)

  在父子类中出现了方法签名一致的方法,遵守重写原则(两等两小一大)

  两等:

    一等:方法签名一致

    二等:如果父类的方法的返回值是void/基本数据类型`,子类方法的返回值类型要和父类一致

  两小

    一小:如果父类的方法返回值类型是引用数据类型,那么子类的返回值类型要么与父类返回值类型一致,要么是其子类(返回值类型可以是父类,也可以是其子类)

    二小:子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等

  一大:

    子类方法的访问权限应比父类方法的访问权限更大或相等

重写示例:

public class Test {
    public static void main(String[] args) {
        // 创建子类对象
        Doctor d = new Doctor();
        d.age=10;
        d.treat();
        System.out.println(d.age);
    }
}
​
// 父类,超类
class xin {
    // 属性
    String name;
    int age;
    char gender;
​
    // 科室
    String dept;
​
    // 方法
    public void treat() {
        System.out.println(this.name + "在治病救人..");
    }
}
​
// 医生类---子类
// 通过extend关键字,使医生类和xin类产生关系
class Doctor extends xin {
    public void treat(){
        System.out.println("医生在治病救人");
    }
}
​
// 护士类
class Nurse extends xin {
​
    @Override
    public void treat() {
​
        System.out.println("护士在治病救人");
    }
}

 

访问权限修饰符

  子类方法的访问权限修饰符,要么和父类一致,要么大于父类的方法访问权限修饰符的范围
  父类的私有化信息,构造方法,构造代码块,子类继承不到
  protected 修饰的内容,如果在其他类的位置,且具有父子类的关系,要保证带有protected的方法要在子类中使用。
 本类子类同包类其他类
public 可以 可以 可以 可以
protected(不修饰类) 可以 可以 可以 不可以
默认 可以 (同包子类)可以 可以 不可以
private(不修饰类) 可以 不可以 不可以 不可以

 

public class Test {
​
}
​
// 父类,超类
class A{
    //对子类不可见,此类无法继承
    private void m(){
    }
}
class B extends A{
    int m(){
        return 0;
    }
}

 

super:代表父类对象的引用,可以调用父类的属性,方法

super():调用父类构造方法,子类的所有的构造方法默认都会调用父类的无参构造方法,如果父类没有提供无参构造,子类所有的构造方法要保证调用父类的其他形式的构造方法

  super 语句:在子类构造方法中调用父类的构造方法

  父类对象优先于子类存在-----父类对象执行(父类构造代码块---构造方法)------子类对象执行(子类构造代码块----构造方法 )

public class Animal {
    public static void main(String[] args) {
        Pig p = new Pig();
        p.eat();
    }
​
    public Animal() {
        // 子类的每种形式的方法,都会去调用父类的无参构造
        System.out.println("i am father");
    }
​
    public void eat() {
        System.out.println("吃东西");
    }
​
    public void sleep() {
        System.out.println("在睡觉");
    }
}
​
class Pig extends Animal {
    // 使用构造方法观察父子对象的创建顺序
    public Pig() {
        //super--在子类中的构造方法,调用父类的构造方法,放于首行
        super();
        System.out.println("i am child");
    }
​
    public void eat() {
        System.out.println("i am eat");
        System.out.println("i want to sleep");
        // 所有的非静态方法都可以通过对象调用
        // super----代表父类对象的应用
        super.sleep();
    }
}

 

 

posted @ 2020-08-18 20:03  minnersun  阅读(749)  评论(0编辑  收藏  举报