zoukankan      html  css  js  c++  java
  • Java 中的抽象类及接口

    抽象类使用 abstract 关键字修饰,该类即为抽象类。

    抽象类的作用:

    1、某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法。

    2、可以从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免子类设计的随意性。

    抽象类的使用规则:

    1、使用 abstract 定义抽象对象;
    2、abstract 定义抽象方法,只有声明,不需要实现;
    3、包含抽象方法的类是抽象类;
    4、抽象类中可以包含普通的方法,也可以没有抽象方法;
    5、抽象类不能直接创建,可以定义引用变量,指向子类对象;

    首先先创建一个抽象类:

    public abstract class Telephone {
        //打电话
        public abstract void call();
        //发短信
        public abstract void sendMessage();
    }

    接着分别创建两个子类继承该父类,子类必须包含父类所声明的抽象方法,否则会报错:

    public class CellPhone extends Telephone{
    
        public void call(){
            System.out.println("通过键盘来打电话");
        }
    
        public void sendMessage()
        {
            System.out.println("通过键盘来发短信");
        }
    }
    public class SmartPhone extends Telephone{
    
        public void call(){
            System.out.println("通过语音来打电话");
        }
    
        public void sendMessage()
        {
            System.out.println("通过语音来发短信");
        }
    }

    再创建一个测试类:

    public class Test {
        public static void main(String[] args) {
            //普通手机
            Telephone cellphone = new CellPhone();
    
            cellphone.call(); //通过键盘来打电话
            cellphone.sendMessage(); //通过键盘来发短信
    
            //智能手机
            Telephone smartphone = new SmartPhone();
    
            smartphone.call(); //通过语音来打电话
            smartphone.sendMessage(); //通过语音来发短信
    
        }
    }

     Java中的接口被用来继承,必为abstract,一般为public,且内部为常量和抽象方法,一个类可以实现多个接口。

    首先创建一个新的接口:

    public interface IPlayGame {
        public String todo = "可以玩游戏";
        public void playGame();
    }

    将SmartPhone类改写为:

    public class SmartPhone extends Telephone implements IPlayGame{
    
        protected String name = "智能手机";
    
        public void call(){
            System.out.println("通过语音来打电话");
        }
    
        public void sendMessage()
        {
            System.out.println("通过语音来发短信");
        }
    
        @Override
        public void playGame() {
            System.out.println(name + todo);
        }
    }

    实例化并输出:

    IPlayGame sp = new SmartPhone();
    sp.playGame(); //智能手机可以玩游戏
    在接口在使用过程当中,还经常与匿名内部类配合使用,匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称。
    //第一种实现方法
    IPlayGame ip1 = new IPlayGame() {
          @Override
          public void playGame() {
               System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏
          }
    };
    ip1.playGame(); //调用接口方法
    
    //第二种实现方法
    new IPlayGame() {
          @Override
          public void playGame() {
                System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏
          }
    }.playGame();
    
    
     
     
  • 相关阅读:
    python,生产环境安装
    neo4j 图数据库
    RNN系列
    机器学习关于AUC的理解整理
    fensorflow 安装报错 DEPENDENCY ERROR
    dubbo Failed to check the status of the service com.user.service.UserService. No provider available for the service
    使用hbase遇到的问题
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
    gradle 安装
    jenkins 安装遇到的坑
  • 原文地址:https://www.cnblogs.com/evai/p/6035312.html
Copyright © 2011-2022 走看看