关于抽象和多态的总结

抽象

定义:

在某些情况下,类无法(或者没有必要)提供方法的具体实现,可以将此方法声明成抽象方法。使用关键字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

 

posted on 2017-09-21 20:27  李洋1991  阅读(256)  评论(0编辑  收藏  举报