zoukankan      html  css  js  c++  java
  • java-抽象类和接口的使用与区别

    1.抽象类

      通过abstract修饰的类称为抽象类

    //抽象类
    public abstract class Anmail {
        public void shout(){
        //普通方法
        }
        
    //抽象方法    
     abstract void body();
    
    }

      特点:

        抽象类不可以实例化

        抽象类可以有构造方法

        抽象类和普通类的区别是抽象类可以有抽象方法,普通类没有抽象方法,抽象类可以有抽象方法,除此之外,抽象类当中的内容和普通类一样

        抽象类不可以使用Final来修饰的,因为被Final修饰的类为最终类,最终类不可以被继承

      抽象方法:

        使用abstract定义的方法称为抽象方法,抽象方法没有方法体

        特点:

          抽象方法必须被子类实现,有一种情况除外,其子类也为抽象类的时候

          如果在子类的继承线路当中,只要有一个子类实现了抽象方法,那么后面的子类则无需再实现该抽象方法,即使实现了,那也是重写

          抽象方法不可以被Final修饰成为最终方法,最终方法无法被重写

    定义抽象类

    //抽象类
     abstract class Animal1 {
         //抽象方法
        abstract void shout();
        
        //抽象方法    
        abstract void body();
    
    }

    实现子类继承抽象类

    /**
     * 定义小狗类继承动物类的shout方法
     *
     */
     class Dog extends Animal1 {
    
        @Override
        void shout() {
            System.out.println("小狗汪汪叫~.~");
        }
    
        @Override
        void body() {
            System.out.println("这是狗身体 ");
        }
        
    }

    测试抽象类实现:

    /*
    * 定义一个测试类
    * 一键运行,搞定抽象类
    */
    public class Test {

    public static void main(String[] args) {
    //实例化Dog类
    Dog dog = new Dog();
    //实现狗叫
    dog.shout();
    //实现狗的身体
    dog.body();
    System.out.println("很简单吧,抽象类 is just so so");

    }
    }

    2.接口

      通过interface定义的类称为接口。

    //定义动物类接口
    public interface Animal {
        /*
         * 接口中的常量都是静态常量,
         * 一般省略public static final,
         * 只写int ID = 1;即可
         */
        public static final int ID = 1;
        /*
         * 接口里面的方法默认都是public abstract修饰,这两修饰符可以不用写
         */
        public abstract void shout();
        
        void run();
    
    }

      实现接口所有的抽象方法

    /**
     * 定义小狗类实现动物类的shout方法和run方法
     *
     */
     class Dog implements Animal {
    
        @Override
        public void shout() {
            System.out.println("小狗在咆哮。。。");
        }
    
        @Override
        public void run() {
            System.out.println("小狗在草地上奔跑!");
        }
    
        
        
    }

      测试实现的小狗类:

    /*
     * 定义一个测试类
     * 一键运行,搞定接口
     */
    public class Test {
    
        public static void main(String[] args) {
            //实例化Dog类
            Dog dog = new Dog();
            //实现狗叫
            dog.shout();
            //实现小狗跑步
            dog.run();
            System.out.println("很简单吧,接口实现 so easy");
        
        }
    }

      特点:

        接口中的方法都是抽象的,不能实例化,也没有构造方法

        当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法

        接口中默认所有的方法都是抽象方法 ,默认所有的属性都是静态常量

        一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开

        一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开

        一个类在继承另一个类的同时还可以实现接口,此时extends关键字必须位于implements关键字之前(先继承,再实现)

        接口和接口之间是继承,且可以多继承

    3.抽象类和接口的区别

      .抽象类只能单继承,而接口可以多实现,接口就是为了解决只能单继承的局限而诞生的。

      .抽象类可以有抽象方法,也可以有普通方法,接口里面只能存在抽象方法

      .抽象类可以实例化,可以有构造方法,但是接口不能实例化,也没有构造方法 

      .接口能继承接口也能通过子类实现抽象方法 

  • 相关阅读:
    leetcode-383-Ransom Note(以空间换时间)
    AtCoder
    AtCoder
    Hadoop序列化案例实操
    Java实现MapReduce Wordcount案例
    HDFS常用API操作 和 HDFS的I/O流操作
    HBase常用的JAVA API操作
    ZooKeeper之服务器动态上下线案例
    机器学习(6)——逻辑回归
    机器学习(5)——多项式回归与模型泛化
  • 原文地址:https://www.cnblogs.com/momo-nancy/p/15456313.html
Copyright © 2011-2022 走看看