- 继承
- 继承的概念
1)泛华:在多个子类的基础上面抽取共有属性的行为到一个父类中去
2)特化:在一个父类的基础上拓展子类特有的属性和行为,生成一个新的子类
3)原则:父类存放共性,子类存放特性
- 继承的语法及可继承的东西
1)Java类中的继承的语法格式:
class Animal{}
class Person extends Animal{} //目标就是为了继承到Animal,这个类型
A 就是B的父类; B是A的子类
2)非私有的字段 和方法 可以被继承到(暂时这样记忆-主要是从是否可以访问的层面考虑)
3)构造方法不能够被继承:java规定
- 继承的特点
1)Java中类的继承只能够是单继承
2)可以支持多重继承
3)每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承就Object
- 方法覆写
- 为什么需要覆写
父类的方法不满足子类的需求。
- 覆写的简单语法及验证覆写注解
1.直接将父类中需要覆写的方法复制放入子类,修改方法体
2.子类方法是否在覆写父类的方法,可以通过注解@Override验证
1)注解:跟注释很类似
2)注释:给程序员看的
3)注解:给java程序看的
- 方法覆写的细节
1)保证子类方法和父类方法的方法签名(方法名+参数列表)一致;
2)访问权限 : 子类方法的访问权限(修饰符)不能够比父类方法的访问权限更低;
3)static 方法不能够被覆写
4)返回值类型 : 子类方法的返回值类型可以是父类方法的返回值类型的子类或者相等
5)方法主体 : 方法覆写,子类方法和父类方法主体是否可以一样, 可以! 但是没有什么用!
- Object类
- Object的一个介绍
1.每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承就Object
2.理解:Object是每一个类的,直接父类或者间接父类
3.Object所有类的根类,是一个非常重要的类,所有类的重要的公共的静态属性,及动态行为[方法]都被提取到了Object
- Object所有对象数组实现测试
1.类 Object 是类层次结构的根类,每个类都使用 Object 作为超类。[备注:接口没有关系]
2.所有对象[包括数组]都实现这个类的方法 : 所有的对象[数组]都可以调用到Object中的方法;
3.int[] arr = new int[10];//arr数组,arr变量,arr对象
(1)arr可不可以看成是一个对象?
(2)int[]类型引用类型
(3)创建一个数组通过new 复制一份
(4)实现了Object 是类
- Object里面的方法介绍
1.String toString() 返回调用此方法的当前对象的字符串表示形式(把当前对象转成字符串)
2.boolean equals(Object obj) 比较两个对象是否相等(比较调用此方法的对象是否和传入的obj”相等”)
3.int hashCode() 通过对象结合算法得到一个int值
4.Class<?> getClass() 返回此 Object 的运行时类(获得一个对象的真正的类型)
- 覆写toString
- Object类中的方法定义
1)String toString() 返回调用此方法的当前对象的字符串表示形式[把当前对象转成字符串]
2)实际打印地址值:不符合对于对象的描述
- 覆写的意义
自定类创建的对象可以准确的打印对象描述
- 什么时候需要覆写
自定义类需要打印对象描述的时候
- 打印对象那些信息自己定义
自己描述需要打印的信息
- 拓展认识:使用其他类打印地址或者对象信息
覆写之后为什么打印的是覆写后的对象描述:就近原则使用的是自己的toString
- System.out.println()源码阅读
- 覆写equals
1)明确:boolean equals(Object obj) 比较两个对象是否相等(比较调用此方法的对象是否和传入的obj” 相等”)
2)5.Object中equals方法比较对象地址,不符合现实生活中比较对象的规则!java代码的对象比较,因 该是静态属性的比较,父类Object中equals方法比较对象:不满足子类对象比较静态属性的需求, 需要覆写
3)boolean result = stu1.equals(stu2);
4)obj编译器只看类型不看值:obj为Object类型,没有name,age属性:
5)需要强转类型
- 【面试题】==与equals的区别
1.相等 : a 传统的理解一般都是数字值是否相等;
b 在程序中任何东西都是数据,都会比较
2. == 比较运算符
1)基本数据类型变量: 比较的就是值是否相等;
2)引用数据类型变量: 比较的是对象的地址是否一样;(排除特殊 String)
3. equals 方法[最初定义在根类Object中的,比较对象是否相等]方法里面 ==
1) 基本数据类型 : 不能够使用! 基本数据类型不是对象,不能够调用Object中的方法
2) 引用数据类型 : 但是在Object的源码中定义的就是 == 进行比较比较
- 【面试题】Object里面的那些方法是可以覆写的有什么意义
1.在实际开发中,自定义类:一般比较对象,都是通过对象的属性值进行比较,所以自定义类,会经常覆在自 定义的类中写
Object中的此方法,把自己的比较规则写在方法里面;
2.覆写equals方法的意义:定义类,覆写equals方法,自己制定规则,比较自定义类对象的静态属性
- 访问权限修饰符
- 访问权限修饰符的介绍
1.权限修饰符 : private < 默认不写(注意不要添加default修饰)< protected < public
2.作用 : 主要是控制类以及类中成员的访问权限
- 访问权限修饰符的测试
1) public 默认 ①可以修饰类[内部类 和 外部类]
2) private protected ①不能够修饰类外部类
3) 都不能够修饰局部变量
- 访问权限修饰符的使用原则
1)如果不希望别访问,私有化private权限
2)如果希望别人访问,提供公共的权限public
3)如果特殊情况:权限由小到大设置