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

问题描述

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

先上代码
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; 能这么写么?为什么呢?

解决方案

首先,第一个问题,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)

解决方案二:

read instanceof Student,false 反过来是true
Student stu=(Student)read,这个可以,因为student继承自read接口,如果read具体是由Student类实例化的就没问题

解决方案三:

1:true ;2: Student是read的实现!

解决方案四:

如果 read instanceof Student 返回false,read是接口,student是read的实例;
Student stu=(Student)read;这么写没问题,student实现了read接口,可以向下转型。

解决方案五:

如果 read instanceof Student 返回false,read是接口,student是read的实例;
Student stu=(Student)read;这么写没问题,student实现了read接口,可以向下转型。

解决方案六:

如果 read instanceof Student 返回false,read是接口,student是read的实例;
Student stu=(Student)read;这么写没问题,student实现了read接口,可以向下转型。

解决方案七:

如果 read instanceof Student 返回false,read是接口,student是read的实例;
Student stu=(Student)read;这么写没问题,student实现了read接口,可以向下转型。

解决方案八:

如果 read instanceof Student 返回false,read是接口,student是read的实例;
Student stu=(Student)read;这么写没问题,student实现了read接口,可以向下转型。

解决方案九:

read instanceof Student,false 反过来是true
Student stu=(Student)read,这个可以,因为student继承Read接口,如果Read是由Student类实例化的就没问题,这是多态。

解决方案十:

看这个Student是否为Student类的实例判断true和false

时间: 2024-12-29 20:35:19

java-Java关于接口和类的对象的关系的问题的相关文章

Java中类的创建及类与对象的关系

//import java.util.Scanner; //创建一个类 class Person{ //属性和方法的定义不是必须的 //属性 String name ; int age ; //方法 public void tell(){ System.out.println("姓名"+name+" 年龄 "+age); } } public class HelloWorld { public static void main(String[] args){ //创

类和对象的关系,以及类的设计及其操作步骤

问题描述 我学过一些面向对象的语言:有JAVA,C#,C++.但是对方法,函数,类和对象的概念,它们之间的关系,编写代码时类的设计和操作的理解仍然不太清楚,请求专家能够给出详细的解答,谢谢! 解决方案 解决方案二:拿生活中的例子来说吧,人:是一个统称,称其为类.人会走路,说活,思考等:这叫作类的方法,方法和函数其实是一样的,函数放到类里就叫方法了.你或我或他:这种一个个具体的"人"叫做人这个类的实例,也叫类的对象吧.解决方案三:简单地说...类是对象的抽象...对象是类的实例...同一

详解Java继承中属性、方法和对象的关系_java

大家都知道子类继承父类是类型的继承,包括属性和方法!如果子类和父类中的方法签名相同就叫覆盖!如果子类和父类的属性相同,父类就会隐藏自己的属性! 但是如果我用父类和子类所创建的引用指向子类所创建的对象,父类引用所调用子类对象中的属性值或方法的结果是什么呢? 看代码: public class FieldDemo { public static void main(String[] args){ Student t = new Student("Jack"); Person p = t;/

初学Java入门--类与对象

初学|对象 4.2 类与对象 4.2.1 类 在面向对象的语言中,类是个很重要的概念.面向对象的方法把所有的处理对象进行归类.具有相同性质的对象归为一类.例如学校里有很多学生,每个学生都是一个对象,而"学生"则是一个类,它包含了所有在学校学习的人. 在Java语言里,对象是一组描述对象的属性和操作方法的集合,其中属性表明对象的状态,方法表明对象的行为.类是对象的定义.一个对象具有哪些属性和方法,由类来决定.从编程角度看,类是一种复合数据类型,它封装了一组变量和方法(函数). 声明一个类

解析Java的JVM以及类与对象的概念_java

Java虚拟机(JVM)以及跨平台原理 相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平

Java 25天基础-DAY 05-面向对象

面向对象: 面向对象是相对面向过程而言: 面向对象和面向过程都是一种思想: 面向过程,强调的是功能行为 面向对象,将功能封装进对象,强调具备了功能的对象: 面向对象是基于面向过程的.     面向过程和面向对象: 面向过程的角色是执行者的角度. 面向对象的角色是指挥者的角度.   面向对象,是一种变成的思想,能把复杂的问题简单话,把执行者,变成指挥者. 思想比较抽象,可以举例说明. 事例: 电脑的窗口中有最大化,最小化,关闭:将这三个功能封装到窗口中就是面向对象的应用. 人开门:开的功能是门自己

浅析Java中comparator接口与Comparable接口的区别_java

Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如

谈谈我对面向对象以及类与对象的理解

对于刚接触JAVA或者其他面向对象编程语言的朋友们来说,可能一开始都很难理解面向对象的概念以及类和对象的关系.笔者曾经带过一个短期培训班教授java入门基础,在最后结束课程的时候,还有很多同学不太理解面向对象的思维以及类与对象的意义.这几天有空,就想着整理整理自己的思路,谈谈自己对面向对象以及类与对象的理解. 面向对象 首先,一言不和先百度,得到如下定义: 一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类.继承,帮助人们实现对现实世界的抽象与数字建模. 我

后台开发:核心技术与应用实践2.1 类与对象

第2章 面向对象的C++ 学习C++,一定要学会面向对象编程.首先讲下"面向对象"产生的历史原因,主要有以下两点. (1)计算机只会按照人所写的代码,一步一步地执行下去,最终得到结果.无论程序多么复杂,计算机总是能轻松应付.结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,无法进行维护和扩展. (2)结构化设计是以功能为目标来构造应用系统,这种做法导致程序员设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题