目录
封装
封装的好处:
权限修饰符
this 关键字
继承
使用继承的好处
什么时候用继承
编辑
继承的特点
注意点
super关键字
多态
多态的好处?
多态调用成员的特点
多态的弊端
封装
封装告诉我们,如何正确设计对象的属性和方法
简单来说,就是对象代表什么,就得封装对应的数据,并提供数据对应的行为。
在类的内部确保数据操作细节自己完成,不允许外部干涉,只对外公开简单的接口。
封装的好处:
1.让编程变得很简单,有什么事,找对象,调方法就行。
2.良好的封装能减少耦合
3.类内部的实现可以自由的修改
4.类具有清晰的对外接口
权限修饰符
权限修饰符可以控制对外、对类、对子类、对包所暴露的方法与属性。
Java规定的四种权限:private、缺省、protected、public
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | 可以使用 | |||
缺省 | 可以使用 | 可以使用 | ||
protected | 可以使用 | 可以使用 | 可以使用 | |
public | 可以使用 | 可以使用 | 可以使用 | 可以使用 |
this 关键字
在类中使用,可以代表该类,后接属性与方法,代表该类的属性与方法
可以区别成员变量和局部变量
继承
Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。 public class student extends Person {} Student称为子类(派生类),Person称为父类(基类或超类)。
使用继承的好处
可以把多个子类中重复的代码抽取到父类中了,提高代码的复用性。 子类可以在父类的基础上,增加其他的功能,使子类更强大
什么时候用继承
当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码
继承的特点
Java只支持单继承,不支持多继承,但支持多层继承
Java中所有的类都直接或者间接继承于Object类
注意点
父类成员使用private修饰,那么子类不能被继承。(private只是对本类有效)
构造方法不能够被继承(构造方法必须要与类名保持一致)。
super关键字
在类中使用,代表该类的父类
访问父类的属性:super.变量名
访问父类的方法:super.方法名()
super关键字在子类里调用父类的构造方法,则必须在子类的构造方法中的第一行
多态
多态就是同类型的对象,表现出的不同形态,
多态的表现形式 : 父类类型 对象名称=子类对象;
多态的前提 :
有继承或实现关系
有父类引用指向子类对象 eg:Fu f = new Zi();
有方法重写
多态的好处?
使用父类型作为参数,可以接收所有子类对象。体现多态的扩展性与便利。
多态调用成员的特点
变量调用 : 编译看左边,运行也看左边。
方法调用 : 编译看左边,运行看右边
调用成员变量的时候,javac在编译代码时,会先看左边的父类里面有没有这个变量,如果有编译成功,如果没有,编译失败。
java在运行代码时,实际获取的就是左边父类的成员变量的值。
调用成员方法的时候,javac在编译代码时,会先看左边父类里面有没有这个方法,如果有,编译成功,如果没有,编译失败。
java在运行代码时,实际运行的就是右边中子类中的方法。
多态的弊端
不能调用子类的特有功能,如果调用,直接报错。
报错的原因:
当调用成员方法的时候,编译看左边,运行看右边。 那么在编译的时候会先检查左边的父类中有没有这个方法,如果没有直接报错。
解决方案 :
变回子类类型就可以了。
转换的时候用instanceof关键字进行判断
//a是不是Dog的实例,如果是返回trueif (a instanceof Dog){//将a强转成Dog类型Dog d = (Dog) a;}
//JDK14新特性
//先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d
//如果不是,则不强转,结果直接是false
if(a instanceof Dog d){
}