面向对象继承

102 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情 1.子类和父类是is-a的关系

2.继承的使用:

继承的关键字:extends;子类使用extends继承和父类公有的属性

image.png

3.java 单继承,多实现

4.super:子类访问父类成员:使用super关键字访问,用法和this一样,属于关键字

super只能出现在子类的方法和构造方法中 
super调用构造方法时,只能是第一句 
super不能访问父类的private成员

image.png 5.子类不可以继承父类的所有资源:、

image.png

不能被继承的父类成员:private; 
子类与父类在不同包,使用默认访问权限的成员; 
构造方法

6.访问修饰符protected

可以修饰属性和方法 
本类、同包、子类可以访问

四种访问修饰符的作用范围排序:

public > protected > default > private

2.1.public:用public修饰的类,方法和变量,包内及包外的任何类均可访问 2.2.protected:用protected修饰的类,方法和变量,包内的任何类以及包外继承了该类的子类均可访问 
2.3.default:默认修饰符,只有包内的所有类才可以访问
2.4.private:用private修饰的类,方法和变量,只有本类可以访问,包内保外的类都不能访问

image.png 7.多重继承关系的初始化顺序(先调用父类属性和构造方法,再调子类的属性和构造方法)

image.png 8.方法的重写规则:(构造方法不能被重写)

image.png

方法名相同 
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于父类

9.方法重载和方法重写

image.png 重写与重载之间的区别

方法重载:

1、同一个类中 
2、方法名相同,参数列表不同(参数顺序、个数、类型) 
3、方法返回值、访问修饰符任意 4、与方法的参数名无关

方法重写:

1、有继承关系的子类中 
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同 
3、访问修饰符,访问范围需要大于等于父类的访问范围 
4、与方法的参数名无关

10.whitePig wp = new whitePig();

// 这里输出的结果不是继承过来的,构造方法不能被继承,是创建的对象自动调用构造方法里面的输出语句

11.System.out.println(wp);System.out.println(wp.toString());

//打印对象打印出来的是object_4.whitePig@6f75e721,默认打印的是toString() 方法

12.Object类的equals()方法

比较两个对象是否是同一个对象, 是则返回true

操作符==

简单数据类型,直接比较值。如1==2 引用类型,比较两者是否为同一对象
1Object类的equals()方法与==没区别 
(2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals() 
(3)Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值

13.instanceof用于判断一个引用类型所引用的对象是否是一个类的实例

14.三元运算符

三目条件运算符(三元运算符)

三目条件运算符,语法格式:

x ? y : z

其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。

举例:

int score = 80; int x = -100;       
String type = score < 60 ?"不及格" :"及格";        
intflag = x > 0 ? 1 : (x == 0 ? 0 : -1);        
System.out.println("type= " +type);        
System.out.println("flag= "+flag);

15.抽象类:(abstract class)

抽象类不能被实例化(不能使用new,抽象类相当于是提前写好的一个方法,具有不确定性,可执行也可不执行,需要执行的时候再去重写 ) 
抽象类里可以没有抽象方法,但是抽象方法必须在抽象类里

16.abstract 也可以用于方法——抽象方法

抽象方法没有方法体(没有大括号) 
抽象方法必须在抽象类里 抽象方法必须在子类中被实现,除非子类是抽象类(非抽象子类必须重写所有抽象父类的的抽象方法)

17.fainal用法

image.png