从向上向下转型到----抽象类接口(一)

对象的多态性-向上向下转型
  向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动转换;设计模式

  向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类) 父类实例,强制转换;this

  注意:对象的多态性和方法复写是联系在一块儿的spa

  向上转型:设计

class A{
public void print(){
System.out.println("a")
}
}

class B extends A{
public void print(){
System.out.println("b")
}
}

public class Demo{
public static void main(String args[]){
B b =new B();
b.print();
}
}

 

注意:本程序实例化的是子类对象,而且print()方法又被复写了,最终调用的必定是被复写过的方法code

向下转型对象

public static void main(String args[]){
A a = new B();
B b = (B) a;
b.print();
}

 

注意:必须发生向上转型以后,才能发生向下转型,而向下转型有风险,尽可能少使用.blog

好处:在实际开发中,对象向上转型的主要意义在于参数的统一,也是最为主要的用法,而对象的向下转型指的是调用子类的个性化操做.
举个例子,假若有多个类继承自一个类,而且复写其中的一个方法,那么咱们能够:继承

public class Demo{
public static void main(String args[]){
fun(new B());
fun(new c());
}

public static void fun(A a){ //这里只用到了A a 一个参数
a.print();
}
}

而向下转型.若是子类有没有复写父类的方法,并且要调用,那么就要用到了.开发

 

抽象类
抽象类:抽象类就是指在普通方法里增长了抽象方法,并且抽象方法没有方法体,用abstract修饰.同时有抽象方法的类,也必需要被abstract修饰
而抽象类与向上向下转型的关系是,抽象类没法实例化,要调用,必须使用向上向下转型.
同时抽象类必须被继承,并且子类必须重写父类的全部抽象方法.模板

抽象类的限制
抽象类不能用final修饰

抽象类的应用---模板设计模式
普通方法定义在抽象类时,能够直接调用类中的方法,可是具体的抽象方法内容就必须由子类提供

abstract class A{
public void fun(){ //普通方法调用子类方法
this.print();
}
public abstract void print(); //抽象方法
}
class X extends A{
public void print(){
System.out.println("重写父类的抽象方法")
}
}
public class Demo{
public static void main(String args[]){
A a =new X();
a.fun();
}
}

 


理解:若是将父类的方法print比喻为叫这一行为的话,子类的重写则是代表具体是什么在叫.

相关文章
相关标签/搜索