抽象

作者: weiliping | 来源:发表于2018-08-12 20:45 被阅读0次

    抽象是隐藏实现细节并仅向用户显示功能的过程。
    Java中有2种方式可实现抽象:

    • 抽象类(0到100%的抽象)
    • 接口(100%的抽象)

    抽象类

    抽象类是被声明为abstract的,且可以有抽象的或非抽象方法的类。抽象类应该由它的子类来扩展并且实现它的抽象方法。

    抽象方法

    抽象方法是没有实现的方法,即它没有任何方法主体。

    abstract class Shape {
        public abstract double calculateArea(); // 没有任何方法主体
    }
    

    接口

    接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

    接口示例

    package org.oriented.sample;
    
    interface Paintable {
        void paint();
    }
    
    public class Room implements Paintable {
        @Override
        public void paint() {
            System.out.println("Painting the room");
        }
    }
    

    以下是真实生活中的抽象示例:

    我们创建一个接口并命名为Sport,然后创建2个该接口的实现类;分别为Cricket和Football。在实际场景中,可以通过工厂方法提供实现类的对象,这样的话,最终用户看不到具体的实现类。工厂方法可用于根据某些创建条件来创建实现类的对象。

    示例

    package org.oriented.sample;
    
    public interface Sport {
        void play();
    }
    

    Cricket类

    package org.oriented.sample;
    
    public class Cricket implements Sport {
        
        @Override
        public void play() {
            System.out.println("Playing cricket");
        }
    
    }
    

    Football类

    package org.oriented.sample;
    
    public class Football implements Sport {
    
        @Override
        public void play() {
            System.out.println("Playing football");
        }
    
    }
    

    SportInterfaceMain类

    package org.oriented.sample;
    
    public class SportInterfaceMain {
        public static void main(String[] args) {
    
            // factory method
            Sport sport = new Cricket();
            sport.play();
    
            System.out.println("=================");
    
            // You can easily change implementation
            sport = new Football();
            sport.play();
        }
    }
    

    运行以上程序后,结果显示如下:

    Playing cricket
    =================
    Playing football

    相关文章

      网友评论

          本文标题:抽象

          本文链接:https://www.haomeiwen.com/subject/bpudyftx.html