面向对象进阶-继承

继承中:成员变量的访问特点

就近原则:谁离我近我就访问谁,先在局部位置找,找不到然后在到本类成员位置到,如果本类成员位置找不到就到父类成员位置找,逐级往上找。

package oop.Extends.a03oopextendsdemo03;
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}
    class Fu{
        String name="fu";
    }
    class Zi extends Fu{
        String name="zi";
        public void show(){
            String name="zishow";
            System.out.println(name);//zishow
            System.out.println(this.name);//zi
            System.out.println(super.name);//fu
        }
    }

练习:

package oop.Extends.a04oopextendsdemo04;
public class Test4 {
    public static void main(String[] args) {
      Zi z=new Zi();
      z.show();
    }
}
class Fu{
    String name="Fu";
    String hobby="喝茶";
}
class Zi extends Fu{
    String name="zi";
    String game="吃鸡";
    public void show(){
        //如何打印zi
        System.out.println(name);//从局部位置开始往上找
        //如何打印Fu
        System.out.println(super.name);//从本类成员位置开始往上找
        //如何打印喝茶
        System.out.println(super.hobby);//从父类成员位置开始往上找
        //如何打印吃鸡
        System.out.println(game);
    }
}

成员方法的访问特点

直接调用满足就近原则:谁离我近,我就调用谁

super调用,直接访问父类

方法重写

当父类的方法不能满足子类现在的需求时,需要进行方法重写。

书写格式:

在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类的这个方法是方法重写。

@Override重写注解:

是放在重写后的方法上的,校验子类重写时语法是否正确。

package oop.Extends.a05oopextendsdemo05;
public class Test5 {
    public static void main(String[] args) {
OverseasStudent s=new OverseasStudent();
s.lunch();
    }
}
class Person{
    public void eat(){
        System.out.println("吃米饭,吃菜");
    }
    public void drink(){
        System.out.println("喝开水");
    }
}
class OverseasStudent extends Person{
    @Override
    public void eat(){
        System.out.println("吃意大利面");
    }
    @Override
    public void drink(){
        System.out.println("喝凉水");
    }
    public void lunch(){
        eat();
        drink();
        super.eat();
        super.drink();
    }
}

方法重写的注意事项和要求

1.重写方法的名称、形参列表必须与父类中的一致.

2.子类重写父类方法时,访问权限子类必须大于等于父类.

3.子类重写父类方法时,返回值类型必须小于等于父类.

4.建议:重写的方法尽量和父类保持一致.

5.只有被添加到虚方法表中的方法才能被重写.

package oop.Extends.a06oopextendsdemo06;
public class Dog {
    public void eat(){
        System.out.println("狗在吃狗粮");
    }
    public void drink(){
        System.out.println("狗在喝水");
    }
    public void lookHome(){
        System.out.println("狗在看家");
    }
}
package oop.Extends.a06oopextendsdemo06;
public class Husky extends Dog{
    public void breakHome(){
        System.out.println("哈士奇又在拆家了");
    }
}
package oop.Extends.a06oopextendsdemo06;
public class SharPei extends Dog{
    @Override
    public void eat(){
        super.eat();//吃狗粮
        System.out.println("沙皮狗在吃骨头");
    }
}
package oop.Extends.a06oopextendsdemo06;
public class ChineseDog extends Dog{
    @Override
    public void eat(){
        System.out.println("吃剩饭");
    }
}
package oop.Extends.a06oopextendsdemo06;
public class Test {
    public static void main(String[] args) {
       Husky h=new Husky();
       h.eat();
       h.drink();
       h.breakHome();
       h.lookHome();
       ChineseDog cd=new ChineseDog();
       cd.eat();
       cd.drink();
       cd.lookHome();
    }
}

你可能感兴趣的:(java,开发语言)