Java基础知识——继承中成员变量和成员方法的特点、方法重写

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

1.继承中,访问成员变量的特点:就近原则

依次在 局部位置找,本类成员位置找,父类成员位置找,逐级往上.

2.出现重名的成员变量怎么办?

System.out.println(name);           //就近原则:从局部位置开始找
System.out.println(this.name);      //this:从本类成员变量位置开始找
System.out.println(super.name);     //super:从本类继承的父类的成员位置开始找
public class Test {
    public static void main(String[] args) {
    Zi z = new Zi();
    z.ZiShow();

    }
}


class Fu{
    String name = "Fu";

}

class Zi extends Fu{
    String name = "Zi";

    public void ZiShow(){
        String name = "ZiShow";
        System.out.println(name);           //就近原则:ZiShow
        System.out.println(this.name);      //this:从本类成员变量位置开始找:Zi
        System.out.println(super.name);     //super:从本类继承的父类的成员位置开始找:Fu
    }

 

二 继承中:成员方法的访问特点

1.直接调用满足就近原则.

2.super调用,直接访问父类.

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.lunch();

    }
}


class Person{

    public void eat(){
        System.out.println("吃米饭,吃菜");
    }

    public void drink(){
        System.out.println("喝开水");
    }

}


class Student extends Person{

    public void lunch(){
        //使用this关键字:先在本类中查看eat和drink方法,如果没有,就会调用从父类继承下来的方法.
        this.eat();             //吃米饭,吃菜
        this.drink();           //喝开水

        //使用super关键字:直接从父类中调用方法
        super.eat();           //吃米饭,吃菜
        super.drink();         //喝开水
    }

}

 三 方法的重写

1.适用情况:当父类方法不能满足子类现在的需求时,需要进行方法的重写

2.书写格式:在继承体系中,子类出现和父类一模一样的方法声明,就称子类这个方法是 重写的方法.

3.@Override重写注释:把这个注释加在重写方法上,虚拟机会校验子类重写时语法是否正确.

4.方法重写的要求:

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

②子类重写父类方法时,访问权限子类必须大于等于父类空着不写<protected<public()

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

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

⑤只有被添加到虚方法表中的方法(非private,非static,非final修饰的方法)才能被重写.

练习:

 画图设计继承结构:

 代码:

父类

public class Dog {

    public void eat(){
        System.out.println("吃狗粮");
    }

    public void drink(){
        System.out.println("喝水");
    }

    public void guard(){
        System.out.println("看家");
    }


}

 三个子类

public class Huskie extends Dog {
    public void breakHome(){
        System.out.println("拆家");
    }
}




public class Sharpei extends Dog{

    @Override
    public void eat(){
        super.eat();        //在父类的基础上,又添加了其他行为,直接调用父类的行为就行.
        System.out.println("吃骨头");
    }

}

public class ChineseDog extends Dog{

    //中华田园犬完全用不到父类中的代码,所以不用super
    @Override
    public void eat(){
        System.out.println("吃剩饭");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        Huskie h = new Huskie();
        h.eat();
        h.drink();
        h.guard();
        h.breakHome();

        Sharpei s = new Sharpei();
        s.eat();
        s.drink();
        s.guard();

        ChineseDog c = new ChineseDog();
        c.eat();
        c.drink();
        c.guard();

    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值