🍬 博主介绍👨🎓 博主介绍:大家好,我是 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();}
}