final 定义的类不能有子类、final定义的方法不能被复写,用final定义的变量成为了常量,常量无法修改。

 

如果在开发中使用了public static final定义的就是全局常量

public static final int GOOD= 100; 

此概念在开发中使用频繁,只要是常量定义,都用大写字母

 

多态实现的前提:

  继承

  覆写

方法的多态性:

  方法重载

  方法的覆写

对象的多态性:父类与子类对象的转换操作

  对象向上转型:父类 父类对象= new 子类()     自动完成的

  对象向下转型: 子类 子类对象 = (子类)父类实例  强制转换

 

抽象类:如果类中需要定义一个没有方法体的方法,那么可以用abstract关键字定义,而包含有抽象方法的类成为抽象类

如果父类要求子类必须覆写父类的方法,普通类不能对子类产生限制,所以就用抽象类

abstract class A{

  public void fun(){

    System.out.println(“Hello”);
  }

  public abstract void print(); //没有方法体,使用了abstract声明,抽象方法后面没有”{ }”表示没有方法体

}

class B extends A{

  public void print(){

    System.out.println("强制覆写");
  }
} 

public class TestDemo{

  public static void main(String args[]){

    A a = new B();  //向上转型,抽象类不能直接实例化对象
    a.print();  //调用被子类覆写过的方法
  }

}

 

抽象类使用原则:

必须有子类,子类用extends来继承抽象类,一个子类只能继承一个父类

抽象类的子类(如果不是抽象类),那么必须覆写抽象类中全部抽象方法,普通方法不需覆写。

抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。(抽象类不能直接被实例化对象)

 

抽象类不能使用final关键字来定义,因为抽象类必须有子类,final不能有

抽象类比普通类的好处是强制让子类必须覆写其中的方法。本质上就是比普通类多了几个抽象方法定义而已。

 但是普通类中所有结构抽象类都可以定义,比如:普通方法,构造方法,属性,常量...而且子类对象也符合对象实例化流程,默认先调用父类中的无参构造方法,而后再执行子类自己的构造操作

抽象类中可以没有抽象方法,但依然不能用关键字new实例化操作

外部抽象类不允许使用static声明,内部抽象类可以使用,这样表明的是外部抽象类。

abstact class A{

  public abstract void printA();

  abstract class B{

    public abstract void printB();
  }

}

class X{

  public void printA(){}

  public Y extends B{

    public void printB(){};
  }

}
abstact class A{

  public abstract void printA();

  static abstract class B{   //加上static就成了外部抽象类

    public abstract void printB();

  }

}

class X extends A.B{  //继承B

  public void printB(){}

}



 

posted on 2018-04-03 19:35  lonske  阅读(133)  评论(0编辑  收藏  举报