oop - 在面向对象编程中,我们什么时候需要抽象?

标签 oop object interface abstract-class

我读了很多关于“接口(interface)”和“抽象类”的帖子

基本上,当我们谈论对象的特性时,我们使用“抽象类”。

当我们谈论对象能够做什么时,我们使用“接口(interface)”。

但这仍然令人困惑,所以我自己做一个例子来练习。

所以现在我在想一个对象' cargo ;

    public abstract class cargo {

        protected int id;

        public abstract int getWidth(int width);

        public abstract int setWidth(int width);

        public abstract int setHeight(int h);

        public abstract int getHeight(int h);

        public abstract int setDepth(int d);

        public abstract int getDepth(int d);

        public abstract int volume(int w,int h,int d);

        public int getId(){
            return this.id;
        }

        public abstract int setId();

        public abstract void setBrand();

        public abstract void getBrand( );

        .....so on , still have a lot of characteristic of a cargo
    }

    //in the other class
    public class usaCargo extends cargo{
                  ....
                  private 

    }

所以这里有几个关于我的设计的问题。

1.那么在真实的编程项目世界中,我们真的是像上面那样做吗?对我来说,我认为这是好的设计,我们符合 cargo 的基本特征。
  • 如果我们设置“private id”,那么我们实际上不能在任何子类中使用“id”这个变量,因为它是私有(private)的,这是否意味着我们在抽象类中定义的每个变量都必须是公共(public)/ protected ?
  • 有人可以举一些合适的例子让我的 cargo 可以实现一些接口(interface)吗?
    public interface registration{
         public void lastWarrantyCheck();
    }
    

    不过好像不适合这里...
  • 我们通常不在接口(interface)内定义变量,对吗?

  • 我试图在 OOP 上获得更多意义。原谅我长长的问题。

    最佳答案

    您将在 Abstract 类中定义变量,以便在抽象类中定义的方法具有要使用的变量。这些变量的范围取决于您希望具体类如何访问这些变量:
    private当您想强制具体类通过抽象类中定义的 getter 或 setter 时应该使用。
    protected当您想要让具体类直接访问变量时应该使用。
    public当您希望任何类都可以访问该变量时,应使用该变量。

    Cargo 对象可能实现的合理接口(interface)可以是 Shippable ,就像如何将 cargo 从源移动到目的地一样。有些 cargo 可以通过 cargo 列车运输,有些可以通过飞机运输,等等。实现 Shippable 并定义如何运输这种类型的 cargo 取决于具体的类。

    public interface Shippable {
        public void ship();
    }
    

    最后,在接口(interface)中定义的变量必须是 public static 和 final 意味着它将是一个常量变量。

    希望这可以为您解决问题!

    关于oop - 在面向对象编程中,我们什么时候需要抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036900/

    相关文章:

    objective-c - 为什么 Objective-C 中的 "self"可以同时接收 "class method"和 "instance method"?

    objective-c - 我需要一个很好的类比来理解类方法与实例方法

    java - 普通接口(interface)类和只有抽象方法的抽象类有什么区别吗?

    iphone - 高级 iOS 界面设计?

    android - AIDL接口(interface)参数值中的"In/out/inout"?

    java - 用于文本片段和类实例双向映射的数据模型

    C# 简化并可能概括了我的对象克隆方法

    java - 将类存储在 Map 中以便可以实例化它们

    javascript - 如何在 Javascript 中对数组对象使用 forEach 方法或任何数组方法?

    oop - 哪些语言不被视为 OOP 语言