首页 > 代码库 > 继承、重写、super关键字、Object 类的重写、继承关系中的构造方法、抽象类和抽象方法、final关键字

继承、重写、super关键字、Object 类的重写、继承关系中的构造方法、抽象类和抽象方法、final关键字

继承

 

java中只支持单继承,即每个类只能有一个直接父类(难道你有多个亲生父亲?),一个父类可以被多个子类继承(一个爹可有多个儿子)

继承需要符合 is-a 的关系

父类更通用,自雷更特殊更具体

继承通过 extends 关键字来实现

继承背后的思想就是基于已存在的类来创建新类,当从已存在类继承是,就重用了他的方法和属性,还可以添加新的方法和属性来定制新类以应需求

子类不能继承父类中私有的方法和属性

 

子类可以继承父类那些东西

1. 继承 public 和 protected 修饰的属性和方法,无论子类和父类是否在一个包里

2.继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里

3.无法继承private 修饰的属性和方法

4.无法继承父类的构造方法

 

 

重写

 

在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的 重写 或者 方法的覆盖 (overriding) ,

1.重写方法和被重写方法必须具有相同的方法名

2.重写方法和被重写方法必须具有相同的参数列表

3.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类

4.重写方法不能缩小被重写方法的访问权限

 

重载(overloading) 和重写(overriding)有什么区别和联系?

重载涉及同一类中的同名方法,要求方法名相同、参数列表不同、与返回值类型无关、访问修饰符无关

重写涉及的是其子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同(或是其子类)、访问修饰符不能严与父类。

 

 

super 关键字

 

super 代表对当前对象的直接父类对象的默认引用 。在子类中可以通过super 关键字来访问父类的成员。

1.super 必须出现在子类(子类方法和构造方法)中,而不是其他位置

2.可以访问父类的成员,如父类的属性、方法、构造方法

3.注意访问权限的限制,如无法通过super访问 private 成员

 

Object 类的重写

 

Object 是所有类的父类

 

继承关系中的构造方法

 

继承条件下的构造方法的调用如下

1.如果子类的构造方法中没有通过super 显示调用父类的有参构造方法,也没有通过this 显示 调用其自身的其他构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下super()有没有都一样的效果

2.如果子类的构造方法中通过super 显示调用父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法

3.如果子类的构造方法中通过this显示调用自身的其他构造方法,则哎相应构造方法中应用以上两条规则

4.需要特别注意的是,如果存在多级继承关系,则在创建一个子类对象是,以上规则会多次向更高一级父类应用,一直执行到顶级父类Object类的无参构造方法为止

 

资料:

在构造方法中如果有 this 语句或 super 语句 出现 ,则是能是第一条一句

在一个构造方法中不允许同时出现使用 this 和super 语句调用构造方法(否则就有两条第一条语句)

在类方法中不允许出现this 或 suoper 关键字

在实例方法总, this 和super 语句不要求是第一条语句,可以共存

 

 

抽象类和抽象方法

public abstract void print(); 这是抽象方法 不允许有 { }

用abstract 来修饰类 抽象类不能通过new 实例化

1.抽象类和抽象方法通过 abstract 关键字来修饰

2.抽象方法不能实例化。抽象类中可以没有、有一个或多个抽象方法,甚至全部方法都可以是抽象方法。

3.抽象方法只有方法的声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。

4.抽象方法必须在子类(非抽象类) 内重写

 

abstract不能和 private 同时修饰一个方法

abstract不能和 static 同时修饰一个方法

abstract不能和 final 同时修饰一个方法

抽象类中可以有构造方法吗?

抽象类可以有构造方法,其构造方法可以被本类的其他构造方法调用,若此构造方法不是由 private 修饰的,也可以被本类的子类中的构造方法调用。

 

 

final关键字

 

用final 修饰的类 不能再被继承

用final修饰的方法不能被子类重写

用final修饰的变量(包括成员变量和局部变量) 将变成常量,只能在初始化时赋值,并在其他地方修改

使用final 修饰引用变量,变量不可以再指向另外的对象

 

继承、重写、super关键字、Object 类的重写、继承关系中的构造方法、抽象类和抽象方法、final关键字