zoukankan      html  css  js  c++  java
  • java面向对象之 接口与抽象类的区别

    常有面试题中常有这个题,可以2个层面来回答这个问题(当然我想面试官应该对你UML建模中类图设计能力更感兴趣)。
    一、从语法角度:
    抽象类:可以有自己的构造器,抽象方法,成员方法,且可以用各种修饰符
    接口:属性必须是常量,只能使用public 修饰符,只能有抽象方法。
    二、从设计角度:
    抽象类:一般作为基类,被子类所及继承并重写。有一些共有的行为。
    接口: 是一种特性的存在并非共通的。
     
    如:智能机(实现类)与老年机(实现类)都继承自手机(抽象类)它可以发短信,和打电话,但智能机可以玩游戏,
    而玩游戏是一个特性,所以被设计成了接口来实现。
     
    下面讲解下重写,多态。便于更好的理解,这两者的设计。这里可以先使用UML中的类图去设计。(注: 在UML中有类图的概念,类图是用于描述类之间的关系)。
     
    业务场景:从多态的角度设计下 动物 与 猫 鸟 之间的关系并使用抽象类和接口 来描述下他们的行为。
    1、将动物类设计成抽象类
    2、设计猫和鸟类继承至动物类并重写叫方法
    3、设计飞这个特性接口并让鸟实现该接口
    4、最后使用多态的方式调用叫。动物类就会自动的找到具体的动物并执行叫的方法(这里可以设计成静态工厂的设计模式实现)
     
    以下是伪代码重在感受这种设计。
    //动物
    public abstract class Animal {
         public void talk() {
               System.out.println("动物叫");
         }
    }
    
    //鸟类
    public class Bird extends Animal implements Fly {
         public void talk() {
               System.err.println("叽叽喳喳");
         }
         @Override
         public void fly() {
               System.out.println("向南飞");
         }
    }
    //
    public class Cat extends Animal {
         public void talk() {
               System.out.println("瞄");
         }
    }
    //飞的接口
    public interface Fly {
         public void fly();
    }
    //多态的实现 
    public static void main(String[] args) {
               Animal animal=new Cat();//
               animal.talk();
               Animal animal2=new Bird(); //叽叽喳喳
               animal2.talk();
         }
  • 相关阅读:
    SonarQube+Jenkins代码审查集成CI/CD
    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决
    ORA-31687: error creating worker process with worker id 1
    Oracle修改表列长度
    RouYi(Export excel)
    Spring事务失效的原因
    Linux/Keychron键盘 功能键F1-F12映射修复
    git 推送本地文件到远程仓库
    git remote 删除已添加的远程仓库地址
    mssql新建数据库
  • 原文地址:https://www.cnblogs.com/lanSeGeDiao/p/9094704.html
Copyright © 2011-2022 走看看