封装、继承和多态

封装(对类中的属性)

程序追求:

高内聚:类的内部数据操作细节自己完成,不允许外部使用干涉

低耦合:仅仅暴露少量方法给外部使用

封装:

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方法

posted @ 2020-04-23 23:23  DannyBoy~  阅读(216)  评论(0编辑  收藏  举报