多态
多态-一个行为多种状态。比如打篮球 打羽毛球 同样是打 但是动作规则完全不一样。
java里面的多态也是类似。
- 子类继承父类
- 父类引用指向子类对象
- 子类重写了父类方法
当使用父类引用调用被重写的方法时,实际执行的是子类的方法,这就是多态。
class Father {
void say() {
System.out.println("Father say");
}
}
class Son extends Father {
@Override
void say() {
System.out.println("Son say");
}
}
class Daughter extends Father {
@Override
void say() {
System.out.println("Daughter say");
}
}
public class Test {
public static void main(String[] args) {
Father f1 = new Son();
Father f2 = new Daughter();
f1.say(); // 输出 Son say
f2.say(); // 输出 Daughter say
}
}Code language: JavaScript (javascript)
抽象类
把方法的实现部分去掉,直接以分号结束,增加abstract修饰符,就构成了抽象方法。
public abstract void talk();Code language: PHP (php)
抽象方法就是为了重写的。就是我自己不实现,交给子类去实现。
当一个类含有抽象方法的时候,则该类必须声明为抽象类。抽象类不能被实例化,需增加abstract修饰符。
抽象方法只需要声明,而不需要实现。
abstract class Animal {
public abstract void talk();
public void sleep() {
System.out.println("sleeping");
}
}
class Dog extends Animal {
@Override
public void talk() {
System.out.println("汪汪");
}
}Code language: PHP (php)
Final关键字
final的变量的值不能够被改变
class A{
final int i = 9;
}
A a = new A();
// a.i = 3; // 编译出错Code language: PHP (php)
final的方法不能够被重写
class Father {
final void method() {}
}
class Son extends Father {
// void method() {} // 编译出错,不能重写final方法
}Code language: JavaScript (javascript)
final的类不能够被继承
final class Father {}
// class Son extends Father {} // 编译出错,不能继承final类Code language: PHP (php)
接口
接口是抽象方法和常量值的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
public interface IAnimal {
public static final int id = 1;
public void run();
public void eat();
}Code language: PHP (php)
接口可以多重实现,也就是变相的多重继承。
接口成员变量只能是public static final,就算不写也是这个。
接口只能定义抽象方法,默认是public abstract,也只能是public abstract。
接口可以继承其他接口,并添加新的属性和抽象方法。
实现接口需要用implements。
interface IAnimal {
int id = 1; // 默认 public static final
void run(); // 默认 public abstract
void eat();
}
class Dog implements IAnimal {
@Override
public void run() {
System.out.println("dog run");
}
@Override
public void eat() {
System.out.println("dog eat");
}
}
interface IHuman extends IAnimal {
void speak();
}Code language: PHP (php)
Previous: object的一些内置函数