• Java_final/对象多态性、抽象类


    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(){}
    
    }



  • 相关阅读:
    vue+iview简单实现获取要上传文件的Base64字符串
    com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。
    Java入门2.1---面向对象的主线1---类及类的构成成分:属性、方法、构造器、代码块、内部类
    淘系自研前端研发工具 AppWorks 正式发布
    百度开源一款前端图片合成工具库:MI
    微软体验超棒的Fluent UI宣传短片,爱了爱了
    oracle的购买价格研究
    .NET Core 网络数据采集 -- 使用AngleSharp做html解析
    【译】Google Markdown书写风格指南
    我终于逃离了Node(你也能)
  • 原文地址:https://www.cnblogs.com/lonske/p/8710653.html
Copyright © 2020-2023  润新知