初识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的子类对象”);
}
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的子类对象”);
}
相关文章推荐
- java按指定编码写入和读取文件内容的类
- Struts1.x 总结(很全面)
- 初识JAVA3(重载、单子模式)
- Java中的异常(2)
- 用Eclipse 开发Dynamic Web Project应用程序 【转】
- Java中的异常(1)
- java基础笔记
- 初识JAVA2(数组、类、对象、构造器)
- 【JAVA】.jar与sources.jar浅谈~~么么哒
- Spring 容器(一)
- Struts面试题
- Struts面试题
- 详解Java中格式化输出浮点数
- Java中instanceof关键字的应用
- 从源码分析struts2中返回json数据的原理
- synchronized初步
- Java中的装箱与拆箱
- jxl问题,报错如下 Exception in thread "main" java.lang.NoClassDefFoundError: jxl/write/WritableCell
- myeclipse中解决 java heap space 的方法
- Java Basics 【Oriented Process】