封装继承和多态
Posted zgmzbhqa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装继承和多态相关的知识,希望对你有一定的参考价值。
封装(对类中的属性)
程序追求:
高内聚:类的内部数据操作细节自己完成,不允许外部使用干涉
低耦合:仅仅暴露少量方法给外部使用
封装:
1.属性私有(private)
2.public get/set方法,对属性进行操作
意义:
1.提高程序安全性,保护数据(private)
2 能对属性赋值进行相关约束、判定对象赋值是否合适(set、get方法中)
3.影藏代码的实现细节
4.统一接口
5.系统可维护性增加了
继承(对一批类的抽象 extends,protected,public修饰的属性和方法可继承和重写,但private修饰的属性和方法不可继承和重写)
Java中所有的类,都默认继承Object
Java中只有单继承,没有多继承
extends 扩展:子类是父类的扩展
类与类之间的关系(子类与父类)
public:
protected:
private:
default:
Ctrl+h:打开继承树关系(也就是右侧的Hierarchy等级制度)
super
public void test(String name){
System.out.println(name);//test方法中的name值
System.out.println(this.name);//该类建立对象的name值
System.out.println(super.name);//该类对象继承的父类中name的值,但为了方法调用成功,父类中name属性的修饰符为protected
}
私有的(private)无法被继承;用protected和public属性和方法可被继承,能用super调用。
super()一般省去,会自动调用父类构造器,且必须在构造器第一行,否则报错。
父类没有无参构造器,子类也无法构建无参构造器
若非要调用父类有参构造器,用super(属性)来调用父类构造器。
super注意点:
1.super调用父类构造器,必须是构造方法第一行
2.super只能出现在子类的方法或构造器上
3.super和this不能同时调用构造方法
super与this是区别
代表对象
this:本身调用者对象
super:父类对象的应用
前提
this:没有继承也可使用
super:只有继承才可使用
构造方法:
this():本类构造调用
super():父类构造的调用
方法的重写
重写都是方法的重写,和属性无关
子类重写父类的方法。
重写:
1.子类的方法和父类必须相同
2.方法体不同。
特点:
1.方法名相同
2.参数列表必须相同
3.修饰符:范围可以扩大,但不可缩小。public》protected》private
4.抛出的异常:范围,可以被缩小,但不能够扩大。
为什么需要重写:
10父类的功能,子类不一定需要,或不一定满足。
快捷键:alt+insert;
@Override 并且重写方法左边有一个O标志
方法的重写与重载的区别
重写:子类继承父类,在子类中方法名不变,方法体不同
重载:在同一个类中,方法名不变,但参数列表必须改变。
多态(动态编译)
对象能执行什么方法,主要看对象左边的类型,跟右边不大。(如下面s1和s2)
//s1为student对象 能调用的方法是自己有的或从父类继承来的
Student s1 = new Student();
//s2为person对象 为父类型,可以指向子类,但不能调用子类独有的方法(硬要用子类方法,将person对象强制转化为student对象)
Person s2 = new Student();
Object s3 = new Student();
多态的注意事项:
1.多态为方法的多态,属性没有多态
2.父类和子类,有联系,能相互转化,不能转换会出现异常(ClassCaseException)
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象 (引用一般是父类或是有关系的类)
Father f1 = new Son();
类引用指向子类对象,子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了的父类的该方法
当Father与Son类都有run方法时,f1.run()会调用子类中的run方法。
什么方法不能重写:
1.static 修饰的方法 它属于类,不属于实例
2.final常量
3.private方法
以上是关于封装继承和多态的主要内容,如果未能解决你的问题,请参考以下文章