/**
*
* 功能:理解多态和继承
* 可不可以告诉我一下多态继承到底怎么用,为什么computer类的方法参数是Usb usb(这个小写的是什么意思?)如何调用?
*/
public class Computer {
public static void main(String[] args) {
Computer1 c1=new Computer1();
Computer1 c2=new Computer1();
Phone phone=new Phone();
Camera camera=new Camera();
Computer1.useUsb(camera);
Computer1.useUsb(phone);
}
}
//创建Usb接口
interface Usb
{
public void start();
public void stop();
}
//创建相机
class Camera implements Usb
{
public void start()
{
System.out.println("我是相机,开始工作!");
}
public void stop()
{
System.out.println("我是相机,停止工作!");
}
}
//创建手机
class Phone implements Usb
{
public void start()
{
System.out.println("我是手机,开始工作!");
}
public void stop()
{
System.out.println("我是手机,停止工作!");
}
}
class Computer1
{
public void useUsb(Usb usb)
{
usb.start();
usb.stop();
}
}
这本质上是一道多态题,需要理解以下两点:
父类引用指向子类对象:所能看到的只是父类那部分属性和方法
在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 原来父类对象中方法的地址指向自己的方法,当父类引用指向new子类对象的过程时指针会发生改变,父类对象中方法的指针从指向自己的方法变成指向new对象对应类中重写的那个方法(如图红色箭头)。
此题目的核心语句内存图如下:
关键语句解释:
Phone phone = new Phone();创建出来两个对象,一个是Phon类型的一个是 Camera 类型的。
Computer1.useUsb(camera);useUsb( )是Computer1中的一个静态方法,可以用类名直接访问。此方法可以接收的参数类型是Usb类型以及它的子类。这两条语句传入的参数类型是它的子类对象,属于多态。此过程存在:父类对象中方法的指针从指向自己的方法变成指向new对象对应类中重写的那个方法(如图红色箭头),所有执行方法体的时候输出的是其对应子类中重写以后的方法的内容。
学习Java经常遇到的问题有哪些?
问题一:能看懂,但是不会写 这是很多初学者在学习的时候经常遇到的问题。在通过视频学习或是听课的时候觉得自己能够听懂,但是当自己练习的时候就会发现不知道应该如何下手。如果遇到这个问题,北大青鸟建议找一个适合自己学习的方法,课前预习、课后复习,经常练习,加深自己对代码的理解。问题二:学完就忘...
学习java语言 需要注意什么啊
2、制定学习任务 初学者在学习Java时,往往会因为没有计划像无头的苍蝇一样乱撞,学习的内容不系统,最终导致学习效果低下,拖延进度。所以我们在学习的时候要制定好学习计划,按照计划走,从基础到进阶,一步一个脚印,只有这样,你才能学会怎么样解决问题,并加深自己对Java的理解。3、注重理论实践 学习...
Java初学者迷茫了怎么办?
迷茫一:Java学习这么难,我真的能学好吗?对于Java初学者来说,这个问题真的很苦恼,因为这会动摇Java初学者学习Java的决心。你要知道,Java是门高端计算机编程语言,学习一定是有一定难度的,不仅你学难,其他Java初学者也是一样,最终学成出师的,就是坚信自己能够学好的,并且坚持不懈付出努力学习的,...
Java语言开发初学者难学吗?
1.很多朋友刚接触Java的时候,觉得也就一般般,刚开始学习的Java基础中的基础,所以刚开始还是不太难,随着你学习越来越深入,那么你会发现Java语言的确比想象中的要难学一点,很多Java知识你以为自己当场掌握了,然后才发现自己真的没有掌握好,遗忘远超所学。2.并且一直接触Java语言,也不知道什么时候...
Java初学者应该注意些什么呢?
初学者在学习的时候一定要注意一点,先想后做,先是把思路弄清楚,然后在编写代码,逻辑一定要清晰,细节要做到位。在提高效率上面,我们切记不要在一个小问题上面钻牛角尖,很多时候我们确实是用自己的能力解决不了这个小问题,因为我们接触的东西是是在太少了。所以就要多去寻求别人的帮助,让解决问题...
java实在学不明白,几个java问题请教大家
java实在学不明白,几个java问题请教大家 1、java的classpath里做什么用的? 答:你写的JAVA代码将被编译成以 .class 结尾的"类文件" classpath就是这个"类文件"所在的系统物理路径 2、java里方法重载是什么意思?什么是方法重载? 答:就是方法名相同参数不同的两个方法, 例如: public ...
JAVA初学者问题,请各位不要骂我提这么简单的问题?因为是没有任何基础...
2,初学者最好先使用一段时间的editplus软件,你可以理解为功能强大的记事本,可以帮你检测你的代码写的是不是有语法错误,也就是单词什么的有没有打错。初学阶段手动敲一些代码对以后有好处。等你JAVASE语法这些基本学完了,在使用eclipse开发,这是现在主流的JAVA开发平台,功能非常强大的。当然,JAVA...
JAVA初学者的疑问
这个.NET框架自带把程序制作成安装程序的功能模块,我们一般使用的java开发工具Eclipse或者MyEclipse好像没有这个功能,需要安装插件,因为本身用java开发桌面应用程序的就少的可怜,所以没注意这些东西,学习java主要还是学习j2se和j2me吧,一个做网站一个做手游。我奉劝你别用java开发桌面应用程序。
JAVA面试试题,我是初学者下面的题都不会,请大家帮我做做,谢谢了感激不...
20:java代码生成生成中间代码,通过java虚拟机来执行;21:没有指针,垃圾回收,异常处理;22:接口里可以定义属性,但必须是常量。修饰符为:interface;23:数组里没有length()这个方法,String中有length()这个方法;24:标识符就是常量、变量、函数自定义的名称。Java标识符由数字、字母、下划线、$...
自学编程的常见困难有哪些?
缺乏明确的学习目标:在开始学习编程之前,很多人没有明确的学习目标,不知道从哪里开始,也不知道要达到什么样的水平。这会导致学习过程中缺乏方向感和动力。选择编程语言和工具:编程领域有很多编程语言和工具可供选择,如Python、Java、C++等。对于初学者来说,很难确定应该从哪种语言开始学习,以及如何...