当前位置: 首页 > news >正文

面向对象之 继承中的成员访问特点

2.1 继承中变量的访问特点 

在子类方法中访问一个变量,采用的是就近原则。

1.子类局部范围找

2.子类成员范围找

3.父类成员范围找

4.如果都没有就报错(不考虑父亲的父亲....)

示例代码:

public class Fu {int num =50;}
class Zi extends Fu {int num = 40;public void show(){int num = 30;   //局部变量System.out.println(num);//就近原则//需求1: 打印本类成员变量numSystem.out.println(this.num);//需求2: 打印父类成员变量numSystem.out.println(super.num);}
}

测试类代码:


public class Demo03 {public static void main(String[] args) {Zi zi = new Zi();zi.show();}
}

2.2 Super

this&super关键字:

this: 代表本类对象的引用

super:代表父类存储空间的标识(可以理解为父类对象引用)

this&super的使用分别:

成员变量:

this:成员变量  -  访问本类成员变量

super:成员变量  -  访问父类成员变量

成员方法:

this:成员方法  -  访问本类成员方法

super:成员方法  -  访问父类成员方法

构造方法:

this(...) -  访问本类构造方法

super(...)-  访问父类构造方法

2.3 继承中构造方法的访问特点

注意:子类中所有的构造方法默认都会访问父类中无参的构造方法

子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()

问题:如果父类中没有无参构造方法,只有带参构造方法,该怎么办?

1.通过使用super关键字去显示的调用父类的带参构造方法

2.子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参构造方法

注意:  this(...) super(...) 必须放在构造方法的第一行有效语句,并且二者不能共存

示例代码:

public class Fu {public Fu(){System.out.println("Fu无参构造执行了");}public Fu(int age){System.out.println("Fu带参构造执行了:"+ age);}
}
class Zi extends Fu{public Zi(){//JVM默认会在任何构造方法中第一行添加:super()//前提: 当前构造方法第一行不是this() 或者 super()这类操作super();    //调用父类无参构造!!System.out.println("Zi无参构造执行了");}public Zi(int age){super(age);System.out.println("Zi带参构造执行了:"+ age);}
}
public class Demo04 {public static void main(String[] args) {Zi zi = new Zi();System.out.println("-------");Zi zi1 = new Zi(18);}
}

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

通过子类对象访问一个方法

1.子类成员范围找

2.父类成员范围找

3.如果都没有就报错(不考虑父亲的父亲)

示例代码:

public class Student extends Person {public void study(){System.out.println("学生学习...");}
}class Person{private String name;private int age;
public void show(){System.out.println(name+"..."+age);
}public Person(){}public Person(String name, int age) {this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

测试类代码:

 * 1.先找本类* 2.本类找不到往上找父类* 3.都找不到就报错*/
public class Demo05 {public static void main(String[] args) {Student stu= new Student();stu.study();stu.show();}
}

2.5 方法重写

1.方法重写的概念

子类出现了和父类一模一样的方法声明(方法名一样,参数列表也一样)

2.方法重写的应用场景

当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,这样,即沿袭了父类的功能。又定义了子类特有的内容

3.Override注解

用来检测当前的方法,是否是重写的方法,起到【校验】的作用

示例代码:

public class Phone13 {public void call(){System.out.println("打电话");}public void sendMessage(){System.out.println("发短信");}
}
class Phone14 extends Phone13{//场景一 需要父类的功能并在次基础上扩展延申@Overridepublic void call(){//需要父类功能super.call();//扩展自身额外实现System.out.println("视频通话");}//场景二 需要父类的功能 具体实现与父类完全不同@Overridepublic void sendMessage(){System.out.println("发彩色短信");}
}

测试类代码:

public class Demo06 {public static void main(String[] args) {Phone14 phone14=new Phone14();phone14.call();phone14.sendMessage();}
}

2.6 方法重写的注意事项

1.私有方法不能被重写(父类私有成员子类是不能继承的)

2.子类方法访问权限不能更低(public > 默认 > 私有)

3.静态方法不能被重写,如果子类也有相同的方法,并不是重写的父类的方法

示例代码:

public class Fu {//1.父类私有方法子类不能重写private void method1(){}//2.父类静态方法子类不能重写public static void method2(){}//3.子类重写父类方法,子类方法权限要大于等于父类方法权限protected void method3(){}
}
//@Overrideprivate void method1(){}//@Overridepublic static void method2(){}@Overridepublic void method3(){}
}

2.7权限修饰符

访问修饰符就是用来限制类的成员 ( 成员变量、成员方法、构造方法  的访问范围
访问修饰符一共有4
public : 共有的
private: 私有的
protected: 受保护的
缺省的 (default): 不添加任何的修饰词
访问修饰符的范围
范围范围从小到大: private < 缺省(默认) < protected < public

相关文章:

  • TCP相关问题 第一篇
  • 鸿蒙的一些布局
  • 深入剖析JVM垃圾回收,高并发场景JVM性能调优,内存泄露分析,以及如何避免OOM
  • 8个AI软件介绍及其工作原理讲解
  • Day 21
  • Hilt在android项目中使用的注解说明
  • MS8911S/8921S/8922M/8931S 是一款具有内部迟滞的高速比较器
  • MCP是啥?技术原理是什么?Windows系统配置MCP,Cursor使用MCP
  • Selenium4+Python的web自动化测试框架
  • 职位竞聘BA商业推理测评管理人员TAS倍智题库天翼云益丰等企业
  • 轻量级数学竖式训练方案解析
  • 并发和并行
  • 操作系统期末版
  • 大模型在蛛网膜下腔出血预测与诊疗方案制定中的应用研究
  • 重复文件管理 一键清理重复 图片 文档 免费 超轻量无广告
  • 在网络排错中,经常会用到的操作命令和其作用
  • 【OpenCV】使用opencv找哈士奇的脸
  • RabbitMQ 各类交换机
  • 从一次日期格式踩坑经历,谈谈接口设计中的“约定大于配置“
  • Razor编程中@符号的全面解析与深度应用指南
  • 全国企业信息官网网站/seo排名点击工具
  • 一个工厂做网站有用吗/免费网络推广软件有哪些
  • 手机网站模板 织梦/西安网站建设推广优化
  • 那些平台可以给网站做外链/seo网站关键词优化工具
  • 网站备案名称更改/营销技巧有哪些
  • wordpress 数据库名/株洲seo优化推荐