概念 => Java 中提供了一个关键字 extends,用这个关键字,可以让一个类和另一个类建起父子关系
特点 => 子类能继承父类的非私有成员(成员变量、成员方法)
对象 => 子类的对象是由子类、父类共同完成的
好处 => 减少了重复代码的编写,提高了代码的复用性。
public class HelloWorld {
public static void main(String[] args) {
B obj = new B();
System.out.println(obj.i); // 正确
// System.out.println(obj.j); // 报错
System.out.println(obj.x); // 正确
// System.out.println(obj.y); // 报错
}
}
class A {
public int i;
private int j;
}
class B extends A {
public int x;
private int y;
}
2.1 权限修饰符
| 修饰符 | 在本类中 | 同一个包下的其他类里 | 任意包下的子类里 | 任意包下的任意类里 |
|---|---|---|---|---|
| private | √ | |||
| 缺省(即:不写) | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
2.2 单继承
Java 是单继承的,Java 中的类不支持多继承,但是支持多层继承。
Object 类是 Java 所有类的祖宗类。我们写的任何一个类,其实都是 Object 的子类或子孙类。
2.3 方法重写
2.3.1 概念:
2.3.2 注意事项:
public class HelloWorld {
public static void main(String[] args) {
B obj = new B();
obj.printStr(); // Hello World
}
}
class A {
public void printStr() {
System.out.println("Good");
}
}
class B extends A {
@Override // 安全、可读性好
public void printStr() {
System.out.println("Hello World");
}
}
2.4 访问其他成员:
在子类方法中访问其他成员(成员变量、成员方法),也是依照就近原则。
如果在子类中重写了父类的方法(或变量),但是又想访问原来父类的方法(或变量),可以使用 super 关键字,例如:super.方法名( ) (或 super.变量名)。同样的道理,也可以恰当使用 this 关键字进行相关操作。
2.5 子类构造器的super(…)与this(…):
class A {
public A() {
System.out.println("父类的无参构造器");
}
}
class B extends A {
public B() {
// super() // 子类构造器(含参或无参),都默认隐藏了这行代码
// | // 而这行代码作用是运行父类的构造器
// | // 如果父类构造器需要参数,则我们需要自己写一个super( 括号里面填写父类需要的参数 )
// |
System.out.println("子类的无参构造器");
}
}
public class HelloWorld {
public static void main(String[] args) {
B obj = new B();
// 运行结果:
// 父类的无参构造器
// 子类的无参构造器
}
}