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();
    
    
     
     
  • 相关阅读:
    Arcengine效率探究之二——属性的更新 转载
    ArcEngine GDB数据库查询方法总结 转载
    黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
    arcgis10.1补丁下载
    arcgis 分式标注jscript "<und>"+ [DLBM] +"</und>"+ "\r\n" + [DLMC]
    arcgis开发,C盘磁盘空间消失元凶,让c盘可以多出10G
    arcgis 查询 group by order by
    arcgis jscript参考http://technet.microsoft.com/zhcn/library/997bcd30(v=vs.80)
    在ArcEngine下实现图层属性过滤的两种方法 转载http://www.gisall.com/html/72/1242722990.html
    使用Geoprocessor 计算面积和长度 转载
  • 原文地址:https://www.cnblogs.com/evai/p/6035312.html
Copyright © 2011-2022 走看看