zoukankan      html  css  js  c++  java
  • Java入门——抽象类和接口的基本概念

    Java入门——抽象类和接口的基本概念


    本blog内容:

    1. 抽象类的基本概念(重点)
    2. 接口的基本概念(重点)
    3. 对象的多态性(重点)
    4. instanceof关键字

    开始本blog时间:

    2016-09-16   16:21:09


     抽象类的基本概念(重点) 

      包含一个抽象方法的类一定是抽象类

      抽象类和抽象方法都要使用abstract关键字定义

      抽象方法只需要声明,不需要实现

      抽象类必须被继承,子类必须复写全部抽象方法

      

     1 package Sep13;
     2 
     3 public class AbstractClass {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         B b=new B();
    11         b.print();
    12     }
    13 
    14 }
    15 abstract class A{//定义抽象类
    16     public static final String FLAG="CHINA";
    17     private String name;
    18     public String getName() {
    19         return name;
    20     }
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24     public abstract void print();//若在接口中可以省略abstract关键字
    25 }
    26 class B extends A{//继承抽象类
    27     public void print(){
    28         System.out.println("flag="+FLAG);
    29         System.out.println("姓名="+super.getName());
    30         
    31     }
    32 }
    flag=CHINA
    姓名=null

    接口的基本概念(重点)

      是一种特殊的类,是由全局常量和公共的抽象方法(必须是public,可以省略)组成的。一个类可以实现多个接口,实际上也就摆脱了Java单继承的限制。

    1:类实现接口
        class 类 implements 接口A,接口B{  
    }
    2:继承抽象类实现接口
        class 子类 extends 抽象类 implements 接口A,接口B,{
    }
    3:接口的继承
        interface 子接口 extends 父接口A,父接口B{}
    

    对象的多态性

      (1)方法的重载与覆写

      (2)对象的多态性

    对象向上转型:父类 父类对象 =子类实例(自动完成)
    对象向下转型:子类 子类对象=(子类)父类实例
    
     1 public class Wine {
     2     public void fun1(){
     3         System.out.println("Wine 的Fun.....");
     4         fun2();
     5     }
     6     
     7     public void fun2(){
     8         System.out.println("Wine 的Fun2...");
     9     }
    10 }
    11 
    12 public class JNC extends Wine{
    13     /**
    14      * @desc 子类重载父类方法
    15      *        父类中不存在该方法,向上转型后,父类是不能引用该方法的
    16      * @param a
    17      * @return void
    18      */
    19     public void fun1(String a){
    20         System.out.println("JNC 的 Fun1...");
    21         fun2();
    22     }
    23     
    24     /**
    25      * 子类重写父类方法
    26      * 指向子类的父类引用调用fun2时,必定是调用该方法
    27      */
    28     public void fun2(){
    29         System.out.println("JNC 的Fun2...");
    30     }
    31 }
    32 
    33 public class Test {
    34     public static void main(String[] args) {
    35         Wine a = new JNC();
    36         a.fun1();
    37     }
    38 }
    39 -------------------------------------------------
    40 Output:
    41 Wine 的Fun.....
    42 JNC 的Fun2...

    参见:http://www.cnblogs.com/chenssy/p/3372798.html

    总结:向上转型:执行所指向的子类中的方法。但是前提是父类中定义的该方法,如果父类中没有子类中的方法,则无法引用该方法,换言之:子类重写的方法可以应用,子类重载或重新定义的方法,无法引用。


     instanceof关键字

      在Java中使用instanceof关键字判断一个对象到底是那个类的实例,格式如下所示:

     1 package Sep16;
     2 
     3 public class instanceofDemo {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         A a1=new B();//通过向上转型实例化A类对象
    11         System.out.println("A a1=new B():"+"	"+(a1 instanceof A));
    12         System.out.println("A a1=new B():"+"	"+(a1 instanceof B));
    13         A a2=new A();//直接实例化A类对象
    14         System.out.println("A a2=new A():"+"	"+(a2 instanceof A));
    15         System.out.println("A a2=new A():"+"	"+(a2 instanceof B));
    16     }
    17 
    18 }
    19 class A{
    20     public void fun1(){
    21         System.out.println("A---->public void fun1(){}");
    22     }
    23     public void fun2(){
    24         this.fun1();
    25     }
    26 }
    27 class B extends A{
    28     public void fun1(){
    29         System.out.println("B---->public void fun1(){}");
    30     }
    31     public void fun3(){
    32         System.out.println("B---->public void fun3(){}");
    33     }
    34 }
    A a1=new B():    true
    A a1=new B():    true//向上转型的实例化对象即是A类对象,也是B类对象
    A a2=new A():    true
    A a2=new A():    false

     

  • 相关阅读:
    拓扑排序
    最短路径(Dijkstra,SPFA,Floyd)
    最小生成树(Prim)
    最长公共子序列(DP)(二种数组实现+扩展)
    HDU3068(最长回文串)
    python pip 阿里云内网安装地址
    python matplotlib画图改为可写中文
    win10 安装 basemap
    Liunx 安装basemap
    Docker 命令大全
  • 原文地址:https://www.cnblogs.com/BoscoGuo/p/5876619.html
Copyright © 2011-2022 走看看