1 继承
1.1为什么要继承
观察上图,我们发现Bird和Dog这两个类有许多共性,那每次我们都要写,那太麻烦了!!!
那我们是否能把这些共性给抽离呢?用什么给他们抽离出来呢?答:能,继承。
1.2 继承概念
继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。
1.3继承语法
class 子类 extends 父类 {
//.....
}
1.4 父类成员访问
1.4.1 子类中访问父类的成员变量
1.当子类和父类不存在同名成员变量时,子类可以直接访问父类中的成员变量。
class Base {
int b;
int c;
}
public class Derived extends Base{
int a;
public void method(){
a = 10;
b = 20;
c = 30;
}
}
2. 当子类和父类成员变量同名时,优先访问子类自己的成员变量。
class Base {
int b = 50;
int c = 90;
}
public class Derived extends Base{
int a;
public void method(){
a = 10;
b = 20;
c = 30;
}
}
成员变量就近原则:子类自己有优先访问自己的,如果没有则从父类里找。
1.4.2 子类中访问父类的成员方法
与1.4.1的访问形式相同。
1.5 super关键字
1.5.1super的使用
1.super只能在非静态方法中使用
2.super在子类方法中,访问父类的成员变量和方法。
class Base{
int a = 10;
int b = 20;
public void method(){
int c = a + b;
System.out.println(c);
}
}
public class Derived extends Base{
public void test(){
System.out.println(super.a);
System.out.println(super.b);
super.method();
}
}
3.super帮助父类初始化
class Base{
int a = 10;
int b = 20;
public Base(int a, int b) {
this.a = a;
this.b = b;
}
}
public class Derived extends Base{
public Derived(int a, int b) {
super(a, b);
}
}
1.6继承方式
1 单继承
public class A {
.....
.....
}
public class B extends A{
.....
.....
}
2 多层继承
public class A {
.....
.....
}
public class B extends A{
.....
.....
}
public class C extends B{
....
....
}
3 不同类继承同一类
public class A {
.....
.....
}
public class B extends A{
.....
.....
}
public class C extends A{
....
....
}
1.7 final关键字
1 被final修饰的变量,表示常量不能被修改;
2 被fianal修饰的类,不能被继承;
3 被final修饰的方法,不能被修改;