JAVA学习第七天——面向对象_封装、继承(权限修饰符、方法的重写、super关键字)、多态(转型、工厂设计模式)

部分代码转载至马士兵JAVASE资料。


封装


封装的概念

我们程序设计追求“高内聚,低耦合”。

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

➢低耦合:仅对外暴露少量的方法用于使用。 

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

封装的好处:

提高代码的安全性

进行封装:

(1)将属性私有化,被private修饰--》加入权限修饰符

一旦加入了权限修饰符,其他人就不可以随意的获取这个属性

(2)提供public修饰的方法让别人来访问/使用

(3)即使外界可以通过方法来访问属性了,但是也不能随意访问,因为咱们在方法中可以加入 限制条件。

实际开发中,方法一般会写成 setter,getter方法:

可以利用IDEA快捷键生成:alt+insert -->getter and setter:


封装



继承

我们的继承关系,是在合理的范围中进行的抽取 ,抽取出子类父类的关系。

代码层面的解释:

先写父类,再写子类

父类:人类  Person

子类:学生类   Student


继承的好处:提高代码的复用性

父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了

需要注意的点:

父类private修饰的内容,子类实际上也继承,只是因为封装的特性阻碍了直接调用,但是提供了间接调用的方式,可以间接调用。

总结:

(1)继承关系 :

父类/基类/超类

子类/派生类

子类继承父类一定在合理的范围进行继承的    子类 extends  父类

(2)继承的好处:

1.提高了代码的复用性,父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了

2.便于代码的扩展

3.为了以后多态的使用。是多态的前提。

(3)父类private修饰的内容,子类也继承过来了。

(4)一个父类可以有多个子类。

(5)一个子类只能有一个直接父类,但是可以间接的继承自其它类。

(6)继承具有传递性:

Student --》继承自  Person  ---》继承自Object

Object类是所有类的根基父类。

所有的类都直接或者间接的继承自Object。



权限修饰符


总结:

属性,方法:

四种:private,缺省,protected,public

类:

两种:缺省,public

以后写代码,一般属性:用private修饰 ,方法:用public修饰



方法的重写

重写:
发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行重写。

重写有严格的格式要求:
子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。

重载和重写的区别:

重载:在同一个类中,当方法名相同,形参列表不同的时候  多个方法构成了重载
重写:在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写。

重载和重写的区别



super关键字

【1】super:指的是:  父类的

【2】super可以修饰属性,可以修饰方法;

在子类的方法中,可以通过  super.属性  super.方法 的方式,显示的去调用父类提供的属性,方法。在通常情况下,super.可以省略不写:


在特殊情况下,当子类和父类的属性重名时,你要想使用父类的属性,必须加上修饰符super.,只能通过super.属性来调用

在特殊情况下,当子类和父类的方法重名时,你要想使用父类的方法,必须加上修饰符super.,只能通过super.方法来调用

在这种情况下,super.就不可以省略。


【3】super修饰构造器:

其实我们平时写的构造器的第一行都有:super()  -->作用:调用父类的空构造器,只是我们一般都省略不写

(所有构造器的第一行默认情况下都有super(),但是一旦你的构造器中显示的使用super调用了父类构造器,那么这个super()就不会给你默认分配了。如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写)

如果构造器中已经显示的调用super父类构造器,那么它的第一行就没有默认分配的super();了

在构造器中,super调用父类构造器和this调用子类构造器只能存在一个,两者不能共存:

因为super修饰构造器要放在第一行,this修饰构造器也要放在第一行:

改正二选一即可:

【4】以后写代码构造器的生成可以直接使用IDEA提供的快捷键:alt+insert

alt+insert快捷键生成的构造器



多态

多态跟属性无关,多态指的是方法的多态,而不是属性的多态。






总结:

(1)先有父类,再有子类:--》继承   先有子类,再抽取父类 ----》泛化 

(2)什么是多态:

多态就是多种状态:同一个行为,不同的子类表现出来不同的形态。

多态指的就是同一个方法调用,然后由于对象不同会产生不同的行为。

(3)多态的好处:

为了提高代码的扩展性,符合面向对象的设计原则:开闭原则。

开闭原则:指的就是扩展是 开放的,修改是关闭的。

注意:多态可以提高扩展性,但是扩展性没有达到最好,以后我们会学习 反射

(4)多态的要素:

一,继承:   Cat extends Animal  ,Pig extends Animal,   Dog extends Animal

二,重写:子类对父类的方法shout()重写

三, 父类引用指向子类对象:


内存分析




向下转型,向上转型



假如想访问到eat()方法和weight属性:



思考equals方法:




简单工厂设计模式






明天学习:面向对象_final关键字、抽象类和方法、接口、内部类

你可能感兴趣的:(JAVA学习第七天——面向对象_封装、继承(权限修饰符、方法的重写、super关键字)、多态(转型、工厂设计模式))