【问题标题】:What is the job of 'Interface' in OO programming?OO编程中“接口”的工作是什么?
【发布时间】:2014-02-14 00:05:14
【问题描述】:

据我了解,是什么意思。制作方法来构建程序的不同组件。例如如果我要制作一个加减数字的程序,那么我会有类似的东西;

        public void addnum(int addnum){
        addnum= addnum+1;
        system.out.println(addnum);
    }

        public void subtractnum int subtractnum){
        subtractnum = subtractnum-1;
        system.out.println(addnum);
    }
        public static void main(String args[]){
        int num = 21;
        addnum(num);
        subtractnum(num);

    }

我说的对吗,还是有别的意思?

【问题讨论】:

  • 不确定你的意思,但是,接口是类的用户和实现者之间的契约。用户不需要任何关于实现的知识,它只需要知道它的接口。有关接口的更多信息,请参阅:stackoverflow.com/search?q=what+is+an+interface
  • 嗨,谢谢,这正是我想要的。顺便说一句,有没有简单的面向对象编程概念示例的线程?。
  • 有很多关于oop标签的问题:stackoverflow.com/questions/tagged/oop

标签: oop interface concept


【解决方案1】:

在 Java 和 .NET 框架等中,从 Y 继承类 X 有两个好处:

  1. 类 X 的实例封装了 Y 的所有字段的值,并且可以使用 Y 的任何受保护成员,就好像这些成员属于 X 一样;此外,类 X 的定义可以使用 Y 的静态成员,就好像它们是它自己的一样。

  2. Y 类型的变量可能包含对 X 类型实例的引用。

允许一个类对象将多个其他类的内容视为自己的,这样就不可能让向上转换和向下转换保持身份;由于保持身份的向上转换和向下转换很有用,Java 和 .NET 允许每个类仅将一个父级的成员视为自己的(父级的父级的成员也是父级的成员,并因此合并)。仅合并来自一个父类的成员的限制通常并不过分。

另一方面,如果每种类型只能存储在其自己类型或其祖先类型的引用中,那将是限制性的。为了允许以多种独立类型存储对对象的引用可能会有所帮助,Java 和 .NET 都可以定义接口类型。对实现接口的对象的引用可以存储在该接口类型的变量中(实现继承的第二个好处),但与仅限于单父的类继承不同,接口实现相对不受限制。一个类可以实现任意数量的独立接口,并且对此类的引用可以存储在任何这些接口类型的变量中。

简而言之,接口提供了继承最重要的好处(引用可替换性),但放弃了一些特性以换取一个重大限制(无法从多个类继承)。

【讨论】:

    【解决方案2】:

    您将不同的方法与不同的参数类型混淆了。
    也许这个例子会有所帮助:

    public interface GeometricalObject {
        double getArea();
        double getPerimeter();
    }
    
    ...
    
    public class Circle implements GeometricalObject {
        public double r;
    
        public double getArea() {
            return 3.14 * r * r;
        }
        public double getPerimeter()
        {
            return 3.14 * 2 * r;
        }
    }
    
    ...
    
    public class Square implements GeometricalObject {
        public double s;
    
        public double getArea() {
            return s * s;
        }
        public double getPerimeter()
        {
            return 4 * s;
        }
    }
    
    ...
    
    public void printGeomObject(GeometricalObject g) {
        System.out.println("Area is " + g.getArea());
        System.out.println("Perimeter is " + g.getPerimeter());
    }
    

    【讨论】:

      【解决方案3】:

      接口为我们提供了多级继承的方式。

      接口可以扩展到任何类

      任何类的公共属性都可以在接口中定义,并且可以被多个类继承。

      【讨论】:

        猜你喜欢
        • 2014-03-27
        • 2022-05-23
        • 2010-10-25
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        • 2015-07-09
        • 2011-06-29
        相关资源
        最近更新 更多