Java关于接口和类的对象的关系的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java关于接口和类的对象的关系的问题

2016-06-06 14:44:48 1857 1

先上代码

public interface Read{
}
public class Student implements Read{
}
public class Create{
private Read read;
public void setRead(Read read){
this.read=read;
}
public Read getRead(){
return this.read;
}
}

现在在另一个类的方法中
Read read=new Create().getRead();
下面有两个问题:
1.如果 read instanceof Student 返回true 还是 false
2.Student stu=(Student)read; 能这么写么?为什么呢?

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:28:38

    首先,第一个问题,read instanceof Student返回值跟你的Read传递的实际类型有关系,如果传递的是一个Student对象,是会返回true的。
    测试代码:

     public class Create {
        private Read read;
    
        public void setRead(Read read) {
            this.read = read;
        }
    
        public Read getRead() {
            return this.read;
        }
    
        public static void main(String[] args) {
            Create t = new Create();
            t.setRead(new Student());
            Read read=t.getRead();
            System.out.println(read instanceof Student );
        }
    }

    修正你的Create代码,传递Read对象为Student的实现时,第一个问题就是true,当然如果传入的Read不是Student的实例,就是false.
    其次,这个问题,跟第一个问题的本质是一样的,要看传递的Read的实际类型是什么,如果是我测试类给的Student的实例,那么就能正确转换成功,但是如果是其他Read的实现,这个这句话不会报编译错误,却会有运行时异常。测试代码如下:

     public class OtherRead implements Read{
    
        @Override
        public void read() {
            System.out.println("other read.");
    
        }
    
        public static void main(String[] args) {
            Create t = new Create();
            t.setRead(new OtherRead());
            Read read=t.getRead();
            System.out.println(read instanceof Student );
            Student s = (Student)read;
        }
    }

    上述测试传入的是其他Read的实现类的对象,那么就会运行是异常:

     false
    Exception in thread "main" java.lang.ClassCastException: bit.OtherRead cannot be cast to bit.Student
        at bit.OtherRead.main(OtherRead.java:16)
    0 0
相关问答

1

回答

Java接口是什么?

2022-04-03 19:27:05 564浏览量 回答数 1

1

回答

Java的接口是什么?

2022-04-02 16:19:51 310浏览量 回答数 1

1

回答

java中接口是什么?

2021-11-15 14:33:54 258浏览量 回答数 1

1

回答

java中的接口是什么?

2021-11-02 17:52:19 179浏览量 回答数 1

0

回答

请问java性能问题:如何优化向HashMap插入元素的速度?

2021-11-12 17:18:18 134浏览量 回答数 0

1

回答

java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-06 16:21:40 167浏览量 回答数 1

0

回答

您好java性能问题:有没有比较字符串是否相等的最快方法?

2021-11-07 00:39:14 143浏览量 回答数 0

1

回答

java性能问题:如何优化向HashMap插入元素的速度?

2021-11-06 15:41:34 212浏览量 回答数 1

0

回答

请问java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 22:35:44 85浏览量 回答数 0

1

回答

java中常用的性能调优诊断工具都有哪些,请帮忙提供一下?

2021-11-06 10:24:39 158浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载