抽象
定义:
在某些情况下,类无法(或者没有必要)提供方法的具体实现,可以将此方法声明成抽象方法。使用关键字abstract声明抽象方法和类。
含有抽象方法的类,一定是抽象类。
抽象类只能用作基类。
子类必须实现其中所有的抽象方法。否则定义该子类为抽象类。
abstract不能修饰构造方法和静态方法。
作用:
1.类型隐藏。
2.优化程序。
多态
含义:
对外一种表现形式,内在有多种具体实现。
A a = new A();
“= ” 左边为编译期,进行校验
“=” 右边为运行期,执行程序
A类是B类的父类
A ab = new B();
在A类中编译,B类中运行。
称为父类引用指向子类对象。(向上造型)
此时a只能调用父类A中的方法。子类当中的新方法不能被调用。
B b = (B) ab; (向下造型)
可以进行强转。
多态环境下对属性和方法的调用:
1.对成员方法的调用
//父类
class A{
void eat(){
System.out.println(“A”);
}
}
//子类
class B extends A{
void eat(){
System.out.println(“B”);
}
}
A x = new B();
x.eat(); //此时,调用的是子类B中的方法。
2.静态成员方法的调用
//父类
class A{
static void eat(){
System.out.println(“A”);
}
}
//子类
class B extends A{
static void eat(){
System.out.println(“B”);
}
}
A x = new B();
x.eat(); //此时,调用的是父类A中的方法。
3.成员变量的调用
//父类
class A{
int a = 1;
}
//子类
class B extends A{
int a = 2
}
A x = new B();
x.a; //此时,调用的是父类A中的方法。
多态参数:
作用:提高代码的扩展性
class A{
void eat(){
}
}
class B1 extends A{
void eat() {
}
}
class B2 extends A{
void eat(){
}
}
//构造一个以父类的对象为参数的方法,使用时可以是任何该父类的子类的对象。
method(A a){
a.eat();
}
instanceof
作用:
用于判断对象的具体类型。
if (a instanceof Cat) {
Cat c = (Cat) a;
c.catch();
}
如果对象a是类型Cat的一个实例,则 instanceof 运算符返回 true。如果对象不是指定类的一个实例,或者对象是 null,则返回 false。