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();
         }
  • 相关阅读:
    2015-04
    2014-12
    2014-9
    nginx中ngx_http_ssl_module模块
    nginx中ngx_http_gzip_module模块
    Nginx中ngx_http_log_module模块
    Nginx中ngx_http_auth_basic_moudel和ngx_http_stub_status_module模块
    nginx中ngx_http_access_module模块
    nginx中ngx_http_core_module模块
    Nginx安装
  • 原文地址:https://www.cnblogs.com/lanSeGeDiao/p/9094704.html
Copyright © 2011-2022 走看看