I. 类的继承

权限修饰关键字:

private 外部以及子类均不可访问
public 外部以及子类均不可访问
protected 外部不可,但子类可以访问
  • 定义类时通过关键字extends + 父类类名定义继承;
  • 子类方法中可以通过super关键字调用父类方法(受权限修饰关键字约束);
  • 子类中可以通过定义与父类某一方法名称相同的函数实现对父类中该方法的重写(覆盖);
  • 重写时如修改方法的权限范围,只能从小到大;
  • 重写时返回值必须与父类中同名函数返回值相同或为其子类;
  • 子类实例化时会自动调用父类的无参构造方法,但若需调用有参构造方法需要通过super关键字手动调用;
  • 子类finalize()方法需要保证最后一个动作是调用父类的finalize()方法;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Test {
public Test() {
//do something
}
public void doSomething1() {
//do something
}
private void doSomething2() {
//do something
}
protected void doSomething3() {
//do something
}
public Test doTest() {
//do something
}
}

class Test1 extends Test{
public Test() {
super(); //调用父类构造方法
super.doSomething1();
}
public void doSomething3() {
//do something
}
/*
private void doSomething3() {
//do something
} 写法错误
*/
public Test1 doTest() {
//do something
}
}

II. Object类

  1. Objcect 类是所有Java类的父类。

    tips:Object 类中的 getClass()notify()notifyAll()wait() 等方法不能在子类中重写。(被定义为final类型)

  2. Object 类中的重要方法:

    • getClass():返回对象执行时的Class实例。(Unity的getObejct)

    • toString():将一个对象返回为字符串,一般需要根据需要在子类中重写.

      tips:将对象打印时将自动调用该方法。

    • equals():默认使用“==”运算符根据对象的引用(地址)判断是否相等。故一般需要按需重写

III. 对象类型的转换

  1. 向上转型:将子类对象视为父类对象。由具体到抽象,总是安全的。

    1
    Quadrangle obj = new Patallelogram(); // 平行四边形是四边形的子类
  2. 向下转型:将父类对象转换为子类对象,必须通过强制类型转换,且必须保证当前父类对象是目标子类对象的实例。

    1
    2
    Quadrangle p = new Patallelogram();
    Patallelogram q = (Patallelogram)p;

IV. 使用instanceof操作符判断对象类型

可用于实现向下转换时对父类对象实例类型的判断。

语法格式:(返回值为布尔型)

1
2
myobject instanceof ExampleClass;
// myobject对象是否为ExampleClass类的实例

V. 方法的重载

同过定义同名方法但参数不完全相同的方式实现方法的重载,但单单返回值不同不能实现重载。

编译器利用方法名、方法各参数类型和参数的个数以及参数的顺序来确定类中的方法是否唯一。

不定长参数也可以参与实现重载:

1
2
int add(int a);
int add(int... a);

VI. 抽象类与接口

  1. 抽象类

    tips:

    • 抽象类不能实例化对象;
    • 只有抽象类才可以承载抽象方法;
    • 抽象方法在其子类中必须被重写。

    定义抽象类的关键字 abstract

    1
    2
    3
    public abstract class Test {
    abstract void testAbstract();
    }
  2. 接口:

    定义接口使用关键字 interface

    1
    2
    3
    4
    public interface 接口名 {
    void doSomething();
    // 自动虚方法,可以省略abstract关键字
    }
    • public:接口可以像类一样被权限修饰符修饰,但public关键字仅限于接口在与其同名的文件中被定义时;
    • 接口中的方法必须被定义为public或abstract形式。

    实现接口使用关键字 implements

    tips:Java中不许出现多继承但是可以通过同一个类实现许多接口来实现多继承,一个接口也可以继承另一个接口。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #1
    class 类名 implements 接口1,接口2, ... {

    }

    #2
    interface intf1 {

    }
    interface intf2 extends intf1 {

    }

参考资料《Java从入门到精通(第5版)》