加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

无法理解java中的界面

发布时间:2020-12-15 05:01:31 所属栏目:Java 来源:网络整理
导读:我正在查看 Java网站上提供的Interface章节 Using Interface as a type 所以我的理解是接口的全部意义在于它就像一个类,但是不可能从它形成对象,但是这个页面说明了如何使用接口作为数据类型.行Relatable obj1 =(Relatable)object1;似乎创建了一个Relatable
我正在查看 Java网站上提供的Interface章节
Using Interface as a type
所以我的理解是接口的全部意义在于它就像一个类,但是不可能从它形成对象,但是这个页面说明了如何使用接口作为数据类型.行Relatable obj1 =(Relatable)object1;似乎创建了一个Relatable类型的对象,它是一个接口.虽然我必须说这里没有使用new关键字,因此并没有真正创建对Relatable类型对象的引用.这是否真的导致此行没有创建Relatable类型的对象?

它再次说道

If you make a point of implementing Relatable in a wide variety of
classes,the objects instantiated from any of those classes can be
compared with the findLargest() method—provided that both objects are
of the same class.

这是什么意思?这是否意味着实现Relatable的任何东西都可以调用findLargest()?如果是这样的话,为什么说两个对象属于同一类?

—–编辑—–
从本教程的前几章开始:
相关的定义:

public interface Relatable {

    // this (object calling isLargerThan)
    // and other must be instances of 
    // the same class returns 1,-1 
    // if this is greater // than,equal 
    // to,or less than other
    public int isLargerThan(Relatable other);
}

使用relatable作为类型:

public Object findLargest(Object object1,Object object2) {
   Relatable obj1 = (Relatable)object1;
   Relatable obj2 = (Relatable)object2;
   if ((obj1).isLargerThan(obj2) > 0)
      return object1;
   else 
      return object2;
}

—–编辑2 —–
在关于匿名类的章节中,它执行此操作:

public class HelloWorldAnonymousClasses {

    interface HelloWorld {
        public void greet();
        public void greetSomeone(String someone);
    }
.
.
.
 HelloWorld englishGreeting = new EnglishGreeting();

        HelloWorld frenchGreeting = new HelloWorld() {
            String name = "tout le monde";
            public void greet() {
                greetSomeone("tout le monde");
            }
            public void greetSomeone(String someone) {
                name = someone;
                System.out.println("Salut " + name);
            }
        };

那么这是如何工作的呢?

解决方法

the line Relatable obj1 = (Relatable)object1; seems to create an object of type Relatable

否.此行创建Relatable类型的引用(obj1)并将其分配给object1.为了使其工作,必须将object1强制转换为(接口)类型Relatable.
这里没有创建新对象.

Does this mean anything that implements Relatable can call findLargest()?

是.

If it’s so,why does it say provided that both objects are of the same class?

它与isLargerThan()的实现有关.由于任何实现Relatable接口的类都无法了解实现它的其他类,因此无法与其他类进行有意义的比较.因此,为了使其工作,两个对象必须属于同一类.

对编辑2的回应

So how does this work?

而不是首先定义一个类然后创建它的实例,就像在EnglishGreeting中一样,frenchGreeting即时创建.封面下发生的是创建一个实现HelloWorld的新类,就像在英语中一样,只是这次是匿名的(你永远不会给它起一个名字).当您需要一次性实现接口时,它只是一个方便的快捷方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读