11.11学习总结
作者:互联网
1).继承:面向对象的三大特性之一{子承父业(子类继承父类)}
为什么要使用继承? 为了提高代码的复用性
如何使用继承:子类 extends 父类
父类(基类/超类):被继承的类
子类(派生类);继承父类的类
子类一旦继承父类,有权使用父类的成员,子类中可以扩展子类独有的内容
单继承机制(不可一次性继承多个父类)单继承: 简单,不够灵活不便于后期维护
面向对象的设计原则之一: 开闭原则 : 对修改关闭对扩展开放(面对需求变化,不轻易修改或删除原代码)
父类 : 抽出子类像的部分定义在父类中,达到类层面的简化
2).权限修饰符:访问权限修饰符
本类 同包类 不同包下的子类 不同包下的其他类
public共有的 1 1 1 1
protected 受保护的 1 1 1
default 默认的 1 1
private 私有的 1
访问权限:public>protected>default>private
成员修饰符,只能修饰成员不能修饰局部的
能够修饰类的: public default
父类中被protected修饰的成员,在不同包下的子类中通过继承关系可以使用
常用的: public private
3).super
super与this的区别:
this:this指代当前new的对象
1.能够使用在构造器的首行调用其他构造器 this(参数)
2.区分同名的内部与成员的问题
super : 指代父类对象
1.能够在子类构造器的首行调用父类的指定构造器super(参数),如果没有显示调用父类的指定构造器,默认调用父类空构造,在子类构造器的首行不能同时显示定义this()与super()
2.区分子类与父类同名成员问题,默认就近原则,有局部找局部,没有局部就去找子类,都没有再顺着继承体系到父类中找成员,如果想要找子类this.调用子类成员,但是如果没有局部与成员同名问题,this.可以省略,如果想要找父类super.调用父类成员,如果没有子类与父类与局部同名问题,super.可以省
创建子类对象,会创建父类对象后创建子类对象--> 先父类后子类
静态内容中不能使用this与super
4).重写
重写与重载的区别:重写:1.不同的俩个类2.继承3.方法签名相同(参数列表相同)
重载:1.同一个类中的多个方法2.方法名相同3.方法签名不同(参数列表不同)
方法签名是方法的唯一标识 方法名+参数列表
重写前提: 子类对从父类中继承的某功能,结果功能的实现不满意,这个时候可以在子类中对于这个功能进行重写,重新实现该功能以达到满意的结果
子类中一旦对父类中的某个功能进行重写,在调用时候回对父类的功能进行屏蔽,调用子类中重写的方法,子类对象在调用的时候,子类有重写调用子类的,子类没有重写的,调用父类的
检查是否为重写方法:
1.在行号的后面存在O重写标识
2.@Override 强制检测方法为重写方法
重写满足的三个细节条件:
1.方法签名相同
2.父类的返回值类型>=子类的返回值类型
如果返回值类型为基本数据类型void,要求完全相等
如果返回值类型为引用数据类型 : 要求子类中的重写方法返回值类型<=父类中被重写方法的返回值类型
3.子类中重写方法的权限修饰符>=父类中被重写方法的权限修饰符
不能被重写的方法:
被private修饰的方法不能被重写,被private修饰的成员可以被继承,但是无权限访问
被final修饰的方法不能被重写
被static修饰的方法不能被重写
如果子类中存在与父类静态方法同名的方法,要求子类中的同名方法也为static才可
5).final 成员修饰符
被final修饰的变量会变成常量
被final修饰的方法不能被重写
被final修饰的类不能被继承(太监类)
基本数据类型的变量=右边的数据值
引用数据类型的变量=对象,对象的地址值
6).Object (类的老祖宗 java.lang.Object)
Object是java中所有类的父类
一个类如果没有显示的继承其他父类,就会默认的继承自Object
java中所有类都会显示或者隐式的继承自Object
Object类中定义的成员是所有子类,子类对象都可以使用的(不考虑权限修饰符问题)
Object类中常用的方法:
toString : 返回对象的字符串表现形式
在打印一个对象的引用时,默认输出为当前对象的toString方法的返回值
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Object类中toString默认返回对象的包名.类名@十六进制地址值
在业务需求下,我们想要输出对象的基本信息(成员变量的值)--> 在子类中重写从父类中继承的toString,子类对象调用的时候回调用重写后的方法
equals : 比较两个对象是否相等
== : 比较是否相等
比较基本数据类型数据值是否相等
比较引用数据类型的地址值是否相等
Object类中的equals的实现: 默认比较对象的地址值
public boolean equals(Object obj) {
return (this == obj);
}
子类中重写equals方法,实现比较对象内容(成员变量的值)非地址值
== 与 equals 之间的区别
==可以比较基本数据类型|引用数据类型,比对象地址
equals默认Object类中比较对象地址,因为内部通过==实现比较
可以通过在子类中重写equals实现比较对象内容
javabean规范:
1.类是公共的
2.至少提供一个空构造
3.私有的属性
4.公共的访问方式
5.重写toString与equals方法
7).多态:面对对象的三大特性之一(一种事物的多种表现形式)
多态的表现形式:父类的引用指向子类类型的对象
多态的前提: 继承或实现
多态调用:
调用子类中重写的方法
只能调用父类中存在的成员,对子类新增内容不可见
注意: 正常的情况都应该为对应类型的数据赋值给对应类型的变量,除了当前满足多态时候,才能够实现对应类型的数据赋值给了其他类型的引用 要求其他类型必须为对象的父类类型
多态调用成员的特点:
成员变量: --> 不存在多态
编译运行看父类
编译运行看左边
编译运行看类型
成员方法: --> 行为才有多态
编译看父类,运行
编译看类型
编译看左边
多态如果不配合方法的重写,多态没有意义
父类引用指向不同的子类对象,当子类中存在重写,对功能实现方式可能不同,这是行为多态的体现,同一个功能的不同实现方式
标签:总结,方法,对象,子类,11.11,学习,调用,父类,重写 来源: https://blog.csdn.net/DuanNian233/article/details/121274260