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

随堂笔记160314适配器和多态

2016-03-20 21:11 417 查看

一、适配器模式

ex:

interface AA{
void test1();
void test2();
void test3();
void test4();
void test5();
void test6();
void test7();
void test8();
void test9();
}

//上面的接口有9个抽象方法,如果我们只需要其中两个,而用普通的类去实现的话需要把九个都实现,增加工作量

//以下是适配器

abstract class AAA{
public void test1(){}
public void test2(){}
public void test3(){}
public void test4(){}
public void test5(){}
public void test6(){}
public void test7(){}
public void test8(){}
public void test9(){}
}

//我需要用test1(),test2()

class BB extends AAA(){
public void test1(){
System.out.println("我实现了test1");
}

public void test2(){
System.out.println("我实现了test2");
}
}


在一般开发中,如果接口中的抽象方法太多而又用不着所有方法,就可以创建一个适配器,适配器是抽象类,因为抽象类既可以有抽象方法也可以有实现好了的方法,例如空方法体方法

二、多态

1.定义:某一类事物的多种存在形态

2.代码:

//多态:父类可以接受子类实例对象
class Fruit{}

class Apple extends Fruit{}

class Banana extends Fruit{}

class Orange extends Fruit{}

class Person{
public void eat(Fruit obj){
System.out.println("吃:"+obj);
}
}

class Test{
public static void main(String[] args){
new Person().eat(new Apple());
new Person().eat(new Banana());
}
}


编译通过,因为Person类中的eat()可以接受Fruit类的实例对象,而Apple、Orange、Banana继承了Fruit,所以它们三个也可以被eat接收

3.转型:

java中向下转型必须先向上转型:

Furit f = new Apple();

Apple a = (Apple)f;

/*但是不可以这样做

Banana b = new Apple();

毕竟苹果和香蕉是处于同一级的,而且苹果不可能转换成香蕉,无论从生物学来说还是JAVA

4.instanceof()

这是判断实例x是否属于类型a

Fruit f = new Apple();

if(f instanceof Apple){

System.out.println(“水果f是苹果”);

Apple a = (Apple)f;

}

else{

System.out.println(“很遗憾,它不是苹果”);

}

关于多态的几点:

多态可以使形参接收更多类型参数,但不建议使用Object(Object是所有类的根类,用object意为这个方法可以接收所有类型的参数)

如果用父类接收子类对象,只能调用父类和子类都有的方法

如果用父类接收子类对象,调用父类和子类共有的方法时,调用的是子类的方法

关于类设计:

类的设计主要是父类的设计

子类永远不要去继承一个已经完全实现好了的类,因为一旦发生向上转型,所调用的方法一定是被子类覆盖过的方法,所以只会继续继承抽象类或接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息