黑马程序员技术交流社区
标题:
封装 继承多态 接口??
[打印本页]
作者:
胡焱老师
时间:
2014-1-21 14:52
标题:
封装 继承多态 接口??
近几天复习自学的知识,总觉的有点懵懂的 ,(零基础后遗症)
1.看别人的笔记说 一个独立代码运行,最好只有一个public 修饰 也就是main函数,这是一个对外的公共接口,接口不是(interface)吗,不是抽象的吗??不懂?
2.多态向上转 向下转,到底有啥用啊 在实际工作中,能打个好点的比方不》???真心不理解? 哎!!
作者:
透过生活
时间:
2014-1-21 15:10
Java中在接口的应用中,要注意一下几点:
<1>接口一般定义的是常量和一些抽象方法。抽象类中可以包含抽象方法,也可以有非抽象方法,但是有抽象方法的类一定是抽象类。抽象方法不能有方法体。
<2>在引用接口时,接口的引用指向实现的对象,尽量定义为接口或父类的引用。这其中有可能用到多态的知识。引用接口用implements。
<3>接口(interface)只能定义抽象方法而且默认为是Public。常量是public static final 修饰的
<4>通过implements来引用接口。例:Class runnrtmp inplements runner.
<5>多个无关类可以实现一个接口,!!!!接口的引用指向实现的对象。
<6>一个类可以实现多个无关的接口(这点和继承要有所区别)
<7>和继承一样,接口与实现类之间存在多态性。
<8>接口可以继承其他的接口,并添加新的属性和抽象方法。
<9>在类中实现接口的方法时必须加上public修饰符
作者:
宋星
时间:
2014-1-21 17:07
1.(一个独立代码运行,最好只有一个public 修饰 也就是main函数,这是一个对外的公共接口)
答:这句话的意思是,一个 .java文件代码中最好只有一个main函数,因为在运行时(一个java文件代码先编译后运行)main函数是这个程序运行的入口,而不是所谓的接口。main是一个能被 jvm识别的特殊名称,jvm一看到publi static void main(String[] args){}就知道这个java代码是从这里开始运行的。而且只有有了publi static void main(String[] args){},这个java代码才能独立运行,否则 jvm 找不到入口。
而一个接口,一般定义的是常量和抽象方法,也可以说是一个特殊的类,是给类去实现的,然后覆盖接口中的方法。
2.多态向上转 向下转,到底有啥用啊 在实际工作中,能打个好点的比方不》
答:多态向上转,例,猫和狗都属于动物,所以动物是猫和狗抽象出来的共性东西,是他们的父类,所以我们看见猫过来时,可以说一个动物过来了,这就是多态向上转。
多态向下转:
本来有很多动物,我们却指定其中一个叫猫,为什么呢?因为他有不同于其他动物的地方,它会抓老鼠,但其他的动物没有,我们只能叫猫去抓老鼠(动物强转为猫),而不能随便叫一个动物去抓老鼠,所以要调用抓老鼠的方法,必须把动物强转为猫才行,这是动物中没有的方法。即子类调用子类中特有的方法时,必须把父类强转为子类才行
作者:
dapeng111
时间:
2014-1-21 18:42
1、接口实际就是一个纽带的意思。就像电脑USB接口,DVI接口等,都称之为接口。“main函数,这是一个对外的公共接口”,这句话是一个更广泛意义上的接口,这里的接口是表示,main和外部的其他类之间有紧密的联系,用于执行外部类创建的对象及相关语句等。在这里你也可以理解为“程序入口”的意思。而楼主理解的接口是一个关键字,即interface用于实现一个抽象的类,或者接口。
2、多态向上转是把子类转换为父类,向下转是把父类转换为子类。这是多态最经常用到的转换。
举一个不是太恰当的例子:一天老爸说,去给我买一袋苹果。我就去买东西了,可以记不清到底到要什么了。但是我知道,要买的是水果。(这时候我就做了向上的转型)。我买一点梨回去了。老爸一看,我的要的是苹果,现在怎么是梨(看的过程会思考,首先,梨是一种水果,可是不是苹果。由水果到苹果的转换就是向下转型)。在整个过程中有类型的转换错误发生。
作者:
廉伟杰
时间:
2014-1-21 19:59
本帖最后由 廉伟杰 于 2014-1-21 20:00 编辑
向上转型(子类→父类):(自动完成的)
即 父类名字 父类对象 = 子类实例
向上转型(父类→子类):(强制完成)
即 子类名称 子类对象 = (父类名称)父类实例
多态时方法的调用
当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况):
此时该变量不能再访问子类中自己特有的字段和方法;
若子类覆写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法;
[code]<span style="font-size:10px;">class Car
{
public void show()
{
System.out.println("我是一般的车");
}
}
class BMW extends Car
{
//覆写
public void show()
{
System.out.println("我是宝马车");
}
public void paoMM()
{
System.out.println("我在泡妹妹");
}
}
class BMWDemo
{
public static void main(String[] args)
{
Car c = new BMW();//多态
c.show();//show到底是谁的? c是BMW的
//c.paoMM();//调用不到,c调用不到c实际类型里的方法
if(c instanceof BMW)//检验是不是宝马
{
BMW b =(BMW)c;
b.paoMM();
}
}
}这个例子能很好的说明多态的应用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2