0%

Java学习基础-继承、抽象类模板设计模式

一.
匿名对象:没有名字的对象
指new对象,但是不用对象名来接收,但不是没有name属性。
使用场景:
当一个对象我们只需要使用一次时,就可以选择使用匿名对象。

二.继承

2.1
概念:在一个已知类A的基础上,创建新类B的过程,称之为继承
继承是面向对象三大特征之一。可以使得子类具有父类对属性和方法,还可以在子类中重新定义,追加属性和方法

这里类A称为SuperClass(父/基/超)类
这里类B称为SubClass(子/派生)类

格式:

1
2
3
4
5
6
7
8
9
public class SuperClass{
//member varriable
//member method
}

public class SubClass extends SuperClass{
//Automatically inherit the SupeClass's varriavle & method
//Also can add self varriable & method
}

优势:
a.提高代码复用性(多个类相同对成员可以放到同一个类中)
b.类和类有了关系,提高了代码的维护性,为多态提供前提(如果方法的代码需要修改,修改溢出即可)

弊端:
a.继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时,子类也不得不跟着变化,削弱了子类的独立性

2.2 子类不能继承的内容
a.父类SuperClass的构造方法子类无法继承!!(因为构造方法和类名是一样的)
b.父类SuperClass的私有成员private menmber,子类可以继承,但是不能直接使用。可以使用get和set方法间接使用。

继承后的特点——成员变量
a.当子父类的成员变量名不同时,访问成员变量是没有歧义的,写哪个变量就是哪个变量。
b.当子父类变量同名时,在子类中会根据就近原则,优先访问子类自己的那个成员变量。
c.在子类方法中,使用super.methodName,就会访问SuperClass的成员变量。
就近原则,层层递进:
•子类局部范围找
•子类成员范围找
•父类成员范围找
•如果都没有则报错

super关键字都用法和this关键字用法相似
•this:代表本类成员对象的引用(this关键字指向调用该方法对象,一般是在当前类使用this关键字,使用this常代表本类对象引用)
•super:代表父类存储空间的标识(可以理解为父类对象引用)

继承后的特点——成员方法【重点】
a.当子父类的成员方法名不同时,访问成员方法名是没有歧义的,写哪个方法名就是哪个方法名。
b.当子父类的成员方法同名时,使用子类对象调用该方法,会根据就近原则,优先访问子类自己的那个成员方法。
c.无法通过子类对象使用super调用父类方法。但是可以在子类方法中使用super.methodName()调用父类的同名方法

2.3 重写的概念和应用

重写的概念:
方法的重载(overload):
在同一个类中,出现了方法名应用,但是参数列表(参数个数|类型|顺序)不一样的各种方法,称为方法的重载
方法的重写(override):
在继承关系sub-super中,子类中出现了一个和父类除了方法体,其他一模一样的方法,称为方法的重写

重写的应用:
子类继承父类时,会继承父类的方法,那么当子类发现继承过来的方法功能不足或不适用时,子类就可以重写该方法,重新实现自己需要的方法即可。

2.4 @override注解
@xxx这种称之为注解,英文名annotation
@override 此注解方法称之为方法重写注解,主要作用就是检查重写的方法是否格式正确(符合父类的除了方法体一模一样)

2.5 方法重写的注意事项
a.方法重写是发生在子父类sub-super之间的关系
b.子类方法重写父类方法时,必须要保证权限大于等于父类的权限(一般来说,父类方法权限=子类方法权限)
Java中四大权限(从大到小依次为:public-protected-default-private)
c.方法重写时,除了方法体,其他都要和父类一模一样。(虽然权限可以不一样,但是一般也写一样的权限)
d.私有方法不能被重写(父类私有成员子类是不能继承的)

2.6 继承后的特点——构造方法
子类中所有的构造方法默认都会访问父类中无参的构造方法,子类初始化之前,一定要先完成父类数据的初始化
构造方法特点介绍:
a.子类无法继承父类的构造方法
b.在子类的任何构造方法的第一行,都有默认一句代码super(),代表调用父类的无参构造。

构造方法总结:
a.子类的任何构造,第一行都会调用父类的无参构造。
如果父类没有无参构造:
•通过super关键字前显示的调用父类的带参构造方法
•在父类中提供一个无参构造方法
b.子类的构造方法第一行,super是默认存在的,可以省略不写,但是默认有的

小结:
a.子类的构造方法中默认有一句super()调用父类的无参构造,我们可以手动改写super(…)调用父类的有参构造,具体哪个构造,由参数决定
b.super(…)和this(…)必须在第一行,所有不能重复重写
c.super(…)和this(…)调用父的构造和子类自己的其他构造,具体哪个构造由参数决定
d.super(…)调用父类的有参构造,初始化父类继承的成员变量。
e.this(…)调用子类的其他构造方法

关键字 访问成员变量 访问构造方法 访问成员方法
this this.成员变量,访问本类成员变量 this(…)访问本类构造方法 this.成员方法(…) 访问本类成员方法
super super.成员变量,访问父类成员变量 super(…)访问父类构造方法 super.成员方法(…) 访问父类成员方法
2.7 Java中继承的特点
a.Java只支持单继承,不支持多继承。(一个类最多只有一个super)
b.一个类可以有多个子类(一个super可以有多个sub)
c.可以多层继承(sub有自己的super,相对还有super的super)
总结:Java只支持单继承,但是可以多层继承。

三. 抽象类
3.1 抽象类的概念和引入

抽象类的概念:
a.抽象方法:只有方法的声明,没有方法的实现(即没有方法体)
b.含有抽象方法的类,就是一个抽象类

使用格式
•抽象方法
public abstract 返回值类 方法名(参数列表);
•抽象类
public abstract class 类名{
抽象方法
正常方法
}
注意:抽象类不能创建对象,总是作为父类。
抽象类不能创建对象,需要有子类继承它,并且重写所有抽象类后,该子类才能创建对象。

3.2抽象类的特征:
抽象类具备了含有抽象方法的能力,同时失去了创建对象的能力。
注意事项:
a.抽象类不能创建对象
b.抽象类有构造方法,用于初始化类中的成员变量
c.抽象类中不一定含有抽象方法,有抽象方法的类一定是抽象类(一般来说,抽象类中是有抽象方法的)
d.抽象类的子类必须重写抽象类的所有抽象方法,否则子类还是一个抽象类
e.抽象类存在的意义就是被子类继承的,为子类提供模版

3.3 抽象类的成员特点
•成员变量:可以是变量,也可以是常量
•构造方法:有构造方法,本身不能实例化,用于子类访问父类数据的初始化
•成员方法:
a.可以有抽象方法:限定子类必须完成某些动作
b.也可以有非抽象方法:提高代码复用性

3.4 抽象类名作为形参和返回值
•方法的形参是抽象类名,其实需要的是该抽象类的子类对象
•方法的返回值是抽象类名,其实返回的是该抽象类的子类对象

3.5 模版设计模式

总结:
继承:
a.继承的格式
public class 子类 extends 父亲{}
b.不能继承的内容
I.构造方法不能继承
II.私有成员子类可以继承但是不能直接使用(间接使用,通过get/set方法使用)
c.继承后成员变量和成员方法的特点:
I.不同名,没有歧义
II.同名时在子类中优先调用子类自己的成员
III.可以使用关键字
super.变量名 访问父类的同名成员变量
super.方法名() 访问父类的同名成员方法
d.方法的重写
方法的重写:在继承关系中,子类有一个和父类除了方法体其他一模一样的方法,该方法称为重写
什么时候需要重写:
当子类继承父类的方法后,发现父类方法不实用,子类就可以重写该方法
重写时可以用override帮助检查格式是否正确
e.super(…)
用于子类的构造方法第一行,调用父类的构造方法,具体是哪一个构造
由super(参数)中的参数决定
f.this(…)
用于本类的构造方法第一行,调用本类的构造方法,具体是哪一个构造
由this(参数)中的参数决定
g.Java的继承特点:
只支持单继承,但是支持多层继承
抽象类:
a.抽象方法格式:
public abstract void method();
抽象类格式:
public abstract class className{可能有抽象方法,可以没有抽象方法}
b.抽象类的使用方式:
使用子类继承抽象类,重写所有抽象方法后,子类才能创建对象。
c.抽象类的意义:
给子类继承的,为子类提供的模版(模版设计模式)