🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!目录
成员变量的访问特点
代码:
练习:
成员方法的访问特点
代码:
方法的重写 @Override
方法重写的本质
练习
画图
代码
成员变量的访问特点
- 就近原则:谁离我近,我就用谁
- 先在局部位置找,本类(this)成员位置找,父类成员(super)位置找,逐级往上
代码:
package demon3;public class Test {public static void main(String[] args) {Zi z = new Zi();z.ziShow();}
}class Ye {String name = "Ye";
}class Fu extends Ye{String name = "Fu";
}class Zi extends Fu{String name = "Zi";public void ziShow(){String name = "ziShow";System.out.println(name);//ziShowSystem.out.println(this.name);//ZiSystem.out.println(super.name);//Fu}
}- System.out.println(name);将输出- ziShow。这是因为在- ziShow()方法的作用域中,存在一个局部变量- name,它的值被赋为- "ziShow",所以在当前作用域内,最近的定义的- name变量即是这个局部变量。
- System.out.println(this.name);将输出- Zi。这是因为- this关键字表示当前对象(- Zi类的实例对象),所以- this.name表示当前对象的- name属性的值,而- Zi类中定义的- name属性为- "Zi"。
- System.out.println(super.name);将输出- Fu。这是因为- super关键字表示父类对象(- Zi类的父类- Fu的实例对象),所以- super.name表示父类对象的- name属性的值,而- Fu类中定义的- name属性为- "Fu"。
练习:
- //如何打印Zi
- //如何打印Fu
- //如何打印喝茶
- //如何打印吃鸡
package demon3;
public class Test {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() {//如何打印ZiSystem.out.println(name);System.out.println(this.name);//如何打印FuSystem.out.println(super.name);//如何打印喝茶System.out.println(hobby);System.out.println(this.hobby);System.out.println(super.hobby);//如何打印吃鸡System.out.println(game);System.out.println(this.game);}
}成员方法的访问特点
- 直接调用满足就近原则:谁离我近,我就用谁
- super调用,直接访问父类
代码:
package demon3;
public class Test {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{public void lunch(){this.eat();//吃意大利面this.drink();//喝凉水super.eat();//吃米饭,吃菜super.drink();//喝开水}//应用场景:当父类中方法,不能满足子类现在的需求时,我们就需要把这个方法进行重写。//注意:子类中重写的方法上面需要加上@override@Overridepublic  void eat() {System.out.println("吃意大利面");}@Overridepublic void drink() {System.out.println("喝凉水");}}class Student extends Person{public void lunch(){//先在本类中查看eat和drink方法,就会调用子类的,如果没有,就会调用从父类中继承下来的eat和drink方法this.eat();this.drink();//直接调用父类中的eat和drink方法super.eat();super.drink();}}方法的重写 @Override
当父类的方法不能满足子类现在的需求时,需要进行方法重写。
书写格式 :
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
@Override重写注解
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。
2.加上注解后如果有红色波浪线,表示语法错误。
建议:重写的方法尽量和父类保持一致
方法重写的本质

练习
现在有三种动物:哈士奇、沙皮狗、中华田园犬
暂时不考虑属性,只要考虑行为。
请按照继承的思想特点进行继承体系的设计。
**三种动物分别有以下的行为: **
-  哈士奇: 吃饭(吃狗粮)、喝水、看家、拆家 
-  沙皮狗: 吃饭(吃狗粮、吃骨头)、喝水、看家 
-  中华田园犬:吃饭(吃剩饭)、喝水、看家 
画图

代码
总共要写5个代码

Dog(父类)
package demon3;public class Dog {public void eat(){System.out.println("狗在吃狗粮");}public void dirink(){System.out.println("狗在喝水");}public void lookhome(){System.out.println("狗在看家");}
}Hsky
package demon3;public class Hsky extends Dog{//哈士奇多一个拆家public void breakhome(){System.out.println("哈士奇在拆家");}
}shapi
package demon3;public class shapi extends Dog{//因为沙皮狗吃的是狗粮和骨头//父类中的方法不能满足我们的需求了,所以需要进行重写@Overridepublic void eat() {super.eat();//狗在吃狗粮System.out.println("狗在啃骨头");}
}chinaDog
package demon3;public class chinaDog extends Dog{@Overridepublic void eat() {System.out.println("吃剩饭");}
}测试类DogTest
package demon3;import demon.Hahky;public class DogTest {public static void main(String[] args) {//创建对象并调用Hahky h = new Hahky();h.eat();h.breakhome();h.drink();h.lookhome();System.out.println("-----------------------------------------");chinaDog c = new chinaDog();c.eat();c.lookhome();c.dirink();}
}