您的位置:首页 > 编程语言 > Java开发

Java中的向下转型和向上转型理解

2017-06-10 21:35 267 查看
例子1:

/*
毕姥爷
讲课
钓鱼
毕老师 extends 毕姥爷
讲课
看电影
要求体现多态
要看到向上转型,向下转型
*/
//描述毕姥爷
class 毕姥爷
{
public void 讲课()
{
system.out.println("xx");
}
public void 钓鱼()
{
system.out.println("ss");
}
}
//描述毕老师
class 毕老师 extends 毕姥爷
{
public void 讲课()
{
system.out.println("xx");
}
public void 看电影()
{
system.out.println("ddd");
}
}
class DuoTai
{
public static void main(String[] args)
{
//多态形式
毕姥爷 x=new 毕老师();//向上转型
x.讲课();
x.钓鱼();
//要想使用毕老师的特有方法,看电影
毕老师 y=(毕老师)x;//向下转型
y.看电影();
y.钓鱼();
//转型过程中,至始至终,只有子类对象在做类型的变化


例子2:

阶段一:

笔记本电脑运行,笔记本中有一个运行功能

阶段二:

想用一个鼠标,又有一个功能使用鼠标,并多了一个鼠标对象

阶段三:

还想使用一个键盘功能,又要多一个功能

问题:每多一个功能就需要在笔记本对象中定义一个函数,不好,扩展性怎能解决?

降低鼠标,键盘等外围设备和笔记本电脑的耦合性。

//阶段一
//描述笔记本电脑
class NoetBook
{
public void run()
{
system.out.println("book run");
}
}
class USBTest
{
public static void main(String[] args)
{
NoteBook book=new NoteBook();
book.run();
}
}


//阶段二:需要一个鼠标
//多一个对象,鼠标
class Mouse
{
//开启功能
public void open()
{
system.out.println("mouse open");
}
//关闭功能
public void close()
{
system.out.println("mouse close");
}
}
class NoetBook
{
public void run()
{
system.out.println("book run");
}
//定义使用鼠标功能,鼠标不确定,定义成参数
public void useMouse(Mouse m)
{
//m必须指向鼠标对象才可以调用方法
if(m!=null)
m.open();
m.close();
}
}
class USBTest
{
public static void main(String[] args)
{
NoteBook book=new NoteBook();
book.run();
book.useMouse(new Mouse());
}
}


阶段三:如果还想使用其他设备如:键盘、外置键盘。可以通过在笔记本对象中继续定义usekey()等方法来完成,但是其需要不断改动笔记本类中的内容。扩展性太差,维护性也不好。

每增加一个设备就加一个功能,说明设备和笔记本的耦合性太强

所以不要每次都面对具体的类型,只要定义一个规则,让后期的设备都符合这个规则,应该采用接口的方式来进行解耦

//重新设计  1.先定义规则
interface USB
{
//设备开启
public void open();
//设备关闭
public void close();
}
//描述笔记本
class NoteBook
{
//运行
public void run()
{
System.out.println("book run");
}
}
//使用符合规则的外围设备
public void useUSB(USB usb)//定义了一个接口类型的引用
{
if(usb!=null)
{
usb.open();
usb.close();
}
}
class MouseByUSB implements USB
{
public void open()
{
System.out.println("mouse open");
}
public void close()
{
System.out.println("mouse close");
}
}
class USBTest
{
public static void main(String[] args)
{
NoteBook book=new NoteBook();
book.run();
book.useUSB(null);
book.useUSB(new MouseByUSB());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java