继承语法:
class Dog extends Pet {
//子类特有的属性和方法
}
继承(inherittance)通过extends关键字来实现。其中SubClass成为子类。SuperClass称为父类,基类或超类。修饰符如果是public ,则该类在整个项目中可见;若无public 修饰符,则该类只在当前包可见;不可以使用private和protected修饰类。
继承是面向对象的三大特性之一,是java中实现代码重用的手段之一。Java中只支持单继承,即每一类只能有一个直接的父类。继承表达的是is a 的关系,或者说是一种特殊和一般的关系、。
在java中,所有的java类都直接会这间接地继承了java.lang. Object类。Object类是所有java类的祖先,在定义一个类的 时,如果没使用extend关键字,那么这个类直接继承Object类。
∠ java中子类可以从父类中继承到什么?
- 继承public 和 protected修饰的方法和属性,无论子类和父类是否在同一个包里。
- 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。
- 无法继承private修饰的构造函数
- 无法继承父类的构造函数
∠ 访问修饰符的访问权限
重写和继承中关系中的构造方法
∠ 子类重写父类的方法
如果从父类继承的方法不能满足子类的需求,则在子类中可以对父类的同名方法进行重写(覆盖),以符合要求。
在子类中可以通过需求对父类继承的方法重新编写成为 方法的重写和方法的覆盖。(方法重写必须满足一要求)。
- 重写方法和被重写方法必须具有相同的方法名
- 重写方法和被重写方法必须具有相同的参数列表
- 重写方法的返回值类型必须和被重写的方法的返值类型相同或是其子类
- 重写方法不能缩小被重写的方法的访问权限
⊥ 重载(overloading)和重写(overriding)有什么区别和联系?
重载:涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型,访问修饰符无关。
重写:涉及的是子类和父类的之间的同名方法,要求方法名相同,参数列表相同,返回返回值类型相同(或是其子类),访问修饰符不能严于父类。
Super
super当前对象的直接父类对象的默认引用。
表示调用父类有参构函数,还可以通过super关键字直接调用父类的方法
super必须出现在子类(子类的方法和构造函数)中,而不是其他位置。
可以访问父类的成员,入父类的属性,方法,构造方法。
注意访问修饰符的权限,如无法通过 super 访问private的成员。
继承关系中的构造方法的调用
- 如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没通过this显示调用自身的其他构造方法,则系统默认先调用父类的无参构造方法。这种情况下,有没有super都是一样的。
- 如果子类的构造方法中通过super调用父类的有参构造方法,则将执行父类相应的有参构造方法,而不执行父类的无参构造方法。
- 如果子类的构造方法中通过this显示调用自身的其他构造方法,则在相应的构造方法中应用以上两条规则。
- 特别注意的是,如果存在多级继承关系,则在创建一个子类对象时,以上的规则会多次的更高一级的父类应用,一直到执行顶级父类Object类的无参构方法为。
资料
- 在构造方法中如果有this语句或super语句的出现,则只能是第一条语句。
- 在一个构造方法中不允许同时出现使用this语句或super语句调用构造方法(否则就有两条第一条语句)
- 在类方法中不允许出现this或super关键字
- 在实例方法中,this或super语句不要求是第一条语句,可以共存。
抽象类
抽象类用abstract来修饰,抽象类不能实例化。
抽象类和抽象方法的特点
- 抽象类和抽方法都通过abstract关键字修饰。
- 抽象类不能实例化。抽象类中可没有,有一个,或多个抽象方方法,甚至全部方法都是抽象方法。
- 抽象方法只有方法的声明,没有方法的实现。有抽象方法的类必须声明为抽类,子类必须重写所有抽象方法才能实例化,否则子类还是一个抽象类。
注意
abstract可以用来修饰类和方法,但不能用来修饰属性和构造函数。
抽象类中可以有构造函数,其构造函数可以被本类的其他构造方法调用,若此构造方法不是private修饰,也可以被本类中的构造方法调用。
final修饰符
- 用final修饰的类,不能被继承
- 用final修饰的方法不能被子类重写
- 用final修饰的变量,将变成常量,只能赋值一次
注意
abstract可以用来修饰类和方法,不能用来修饰构造方法。final可以修饰类,方法和属性,不能修饰构造方法。