博主介绍
博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
点赞➕评论➕收藏 == 养成习惯(一键三连)
欢迎关注一起学习一起讨论⭐️一起进步文末有彩蛋
作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
成员变量的访问特点
代码:
练习:
成员方法的访问特点
代码:
方法的重写 @Override
方法重写的本质
练习
画图
代码
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);//ziShow
System.out.println(this.name);//Zi
System.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"
。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() {
//如何打印Zi
System.out.println(name);
System.out.println(this.name);
//如何打印Fu
System.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);
}
}
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
@Override
public void eat() {
System.out.println("吃意大利面");
}
@Override
public 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重写注解
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{
//因为沙皮狗吃的是狗粮和骨头
//父类中的方法不能满足我们的需求了,所以需要进行重写
@Override
public void eat() {
super.eat();//狗在吃狗粮
System.out.println("狗在啃骨头");
}
}
chinaDog
package demon3;
public class chinaDog extends Dog{
@Override
public 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();
}
}