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

初识JAVA4(抽象类、接口、多态)

2015-08-29 21:09 465 查看
11抽象类、接口、多态、instanceof(上)

1)abstract抽象类。 被其修饰的方法叫抽象方法,类叫抽象类,抽象类不能实例化,它不是具体的类。

抽象方法只有方法的声明,而没有实现的方法的部分。

2)如果一个类中有抽象方法,这个类一定是抽象类,否则报错。

3)抽象方法不能有体(体就是{}和其里面的东西。)

4)想通过一个java去解释一个类,必须有main方法,但是编译可以没有。

5)Java里没有抽象属性的概念,不能在属性前加abstract。

6)抽象方法说白了就是把要干的活说出来,自己不干,让后代去干,自己内部调用抽象方法的时候,会自动的寻找到继承自己的类,使用自己后代重写的方法。

抽象方法的使用可以避免修改父类,当有些参数总是变化的时候,我们可以不去修改父类,直接重写声明个子类去继承它,实现它的抽象方法,当然实现就不能用abstrace了,之后实例化这个子类就可以了。

7)抽象类里面可以没有抽象方法,只是这样就没了任何的意义。

8)有一个抽象类的子类,该子类没有实现父类里的抽象方法,那么这个子类就必须写成抽象类,有一个没实现都不行,直到用子类的子类再去实现。(子类不实现父类的抽象类,在自己的类里面再写一遍也可以不写,但是该子类必须是抽象类,以便自己的子类去实现。)

9)



10)interface接口的英文。接口是一个特殊的抽象类,它里面的成员都必须是抽象的。接口中不允许有变量,只允许常量。

11)类和接口是实现关系,一个类可以实现多个无关的接口,多个无关的类可以实现一个接口。

public interfacd IA{}这是一个接口的写法

public class A implements IA{}实现接口的类的写法,implements是实现的意思。(实现抽象类的方法也是和上面一样,去掉abstract,重写抽象方法即可)

12)其中的常量,不是说局限于public static final int x=2;这种。public int x=2;这种在接口中也叫常量,默认是static final;

13)接口中的方法,public abstract void test(){}这么写,但是你public void test(){}这么写也可以,因为默认是abstract。

14)接口中没有除了public之外修饰符,即使你什么也不写,它也不是默认修饰符,还是public,你非要写别的,会报错。

15)接口解决了java不能多继承的问题,一个类可以有多个接口。



16)如果一个类即继承一个父类,又要去实现一个接口,那么声明的时候一定是先继承再实现接口:



17)接口和接口之间是继承的关系,而且是多继承,类和类是单继承。关键字都是extends。



如果用类去实现AVDevice,那么此类必须去实现一共三个接口里的抽象方法。

18)抽象类和接口的区别:

(1)抽象类允许有非抽象的方法,接口不行。

(2)抽象类允许有变量,接口不行。

(3)抽象类里面的修饰符什么都可以,可是接口只能有public。

(4)抽象类只能单继承,接口可以多继承。

11抽象类、接口、多态、instanceof(下)

1)多态,单词Polymorphism。

2)在java中对象变量是多态的,比如类A的儿子是B,则声明一个A 的变量x,x即可以指向A也可以指向他儿子B。

3)



4)多态有三种:

(1)虚方法的调用:



使用的showName()是两者共有的方法,但是实际就是Student的,因为p里的堆地址的值就是Student构造器声明的堆地址。

可是如果你要使用p去调用Student自己的某个方法,而这个方法父亲没有,那么不可以,但是你可以强制类型转换去调用:Student有自己的方法public void kk(){}

p.kk()这是错的,(Student)p).kk();这样是可以的。

(2)下面图片第八行,如果写成A b = new Test();传进函数方法one()里,其实和(1)是一样的,走的是B类的方法。

(3)还是下面这图:



A是B的父亲,第二行形参是个引用类型A,但是可以传A的子类,孙子都行,而且运行的也是孙子儿子的方法,这也是多态,这样的好处就是当子类非常多的时候,就写一个A共用就行了。

多态大大的增加了对象使用的灵活性和拓展性。下面是个典型的例子。Person2是Student2和Teacher2的父类。



5)instanceof运算符(instance是实例的意思):



例子:

if(dog instanceof animals){

System.out.println(“是animals的子类对象”);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: