JAVA学习笔记之三
2013-12-12 21:53
78 查看
前几日忙于面试题,重新回归JAVA
今天聊聊JAVA继承和多态,依旧是C++和JAVA 对比学习
一、JAVA方法的继承
这里假设的方法都是publc ,没有权限的问题。如果要考虑权限,还涉及到一个包的概念,下节再加以赘述。
首先在JAVA中只支持单继承,这一点和C++不一样。
此外C++默认的子类继承父类的成员函数和成员变量之后,若是子类有和其同名的成员变量和成员函数,他的机制是静态引用。(也就是在编译其间确定,根据引用类型决定)
JAVA有一点不同,它的子类是覆盖(override)父类的函数。所以他的方法引用是使用动态引用。(根据绑定的对象决定。)
贴code
output::zi test 0; zi test 9;
很明显,父类中调用的show() 方法是动态绑定了子类。
事实上, JAVA继承中函数的继承很类似于C++中虚函数的实现。
二、final 关键字
final 可以修饰类 方法 变量
final 修饰的类不可以被继承
final 修饰的方法不可以被覆盖
final 修饰的变量是一个常量,只能被赋值一次
短短的三句话概括了final的精髓。
和C++比较相似的是,JAVA修饰变量很类似于const
三、抽象类和抽象方法
c++ 里面有纯虚函数 java里面也有相关的机制,用abstarct 关键字实现
同样的类似于C++里面的多继承,JAVA是通过多接口的机制增加了一种保障。
还是贴Code
很明显地指出了JAVA中的多接口继承。
一些总结:
1、方法只有声明,没有实现时 该方法就是抽象方法,需要被abstract修饰
抽象方法必须定义在抽象类中,该类必须也被abstract修饰
2、抽象类必须由其子类覆盖了其***所有的抽象方法之后,否则该子类还是抽象类
3、抽象类可以不定义抽象方法,但是很少见,目的就是不让该类创建对象——AWT的适配器对象就是该类
4、抽象类可定义抽象方法,也可以定义非抽象方法
5、abstract 不能喝final private static 共存
6、接口(interface) 可以实现多继承。
所以说C++ 的多继承在JAVA处被变为了多接口的实现。
今天聊聊JAVA继承和多态,依旧是C++和JAVA 对比学习
一、JAVA方法的继承
这里假设的方法都是publc ,没有权限的问题。如果要考虑权限,还涉及到一个包的概念,下节再加以赘述。
首先在JAVA中只支持单继承,这一点和C++不一样。
此外C++默认的子类继承父类的成员函数和成员变量之后,若是子类有和其同名的成员变量和成员函数,他的机制是静态引用。(也就是在编译其间确定,根据引用类型决定)
JAVA有一点不同,它的子类是覆盖(override)父类的函数。所以他的方法引用是使用动态引用。(根据绑定的对象决定。)
贴code
class Fu { int x = 8; Fu() { // super(); test(); return; } void test() { System.out.println("fu test"+x); } } class Zi extends Fu { int x = 9; Zi() { super(); test(); return; } void test() { System.out.println("zi tett"+x); } } class Test { public static void main(String[] args) { Fu myfu = new Zi(); // System.out.println("t get the"+myfu.x); } }
output::zi test 0; zi test 9;
很明显,父类中调用的show() 方法是动态绑定了子类。
事实上, JAVA继承中函数的继承很类似于C++中虚函数的实现。
二、final 关键字
final 可以修饰类 方法 变量
final 修饰的类不可以被继承
final 修饰的方法不可以被覆盖
final 修饰的变量是一个常量,只能被赋值一次
短短的三句话概括了final的精髓。
和C++比较相似的是,JAVA修饰变量很类似于const
三、抽象类和抽象方法
c++ 里面有纯虚函数 java里面也有相关的机制,用abstarct 关键字实现
同样的类似于C++里面的多继承,JAVA是通过多接口的机制增加了一种保障。
还是贴Code
abstract class Person { abstract void show(); } interface Walk { public abstract void walk(); } interface Hello { public abstract void hello(); } class ZhangLu extends Person implements Walk,Hello { public void show() { System.out.println("i can show"); } public void walk() { System.out.println("i can walk"); } public void hello() { System.out.println("i can hello "); } } class Test2 { public static void main(String[] args) { System.out.println("Hello World!"); ZhangLu zhang1 = new ZhangLu(); zhang1.show(); zhang1.walk(); zhang1.hello(); } }
很明显地指出了JAVA中的多接口继承。
一些总结:
1、方法只有声明,没有实现时 该方法就是抽象方法,需要被abstract修饰
抽象方法必须定义在抽象类中,该类必须也被abstract修饰
2、抽象类必须由其子类覆盖了其***所有的抽象方法之后,否则该子类还是抽象类
3、抽象类可以不定义抽象方法,但是很少见,目的就是不让该类创建对象——AWT的适配器对象就是该类
4、抽象类可定义抽象方法,也可以定义非抽象方法
5、abstract 不能喝final private static 共存
6、接口(interface) 可以实现多继承。
所以说C++ 的多继承在JAVA处被变为了多接口的实现。
相关文章推荐
- java学习笔记4.6
- 传智博客学习笔记12--JAVA IO
- Java学习笔记整理——类和对象
- Java 中字符串比较equals()和equalsIgnoreCase()的区别(学习笔记)
- JAVA学习笔记_request请求转发_response重定向
- java基础学习笔记(六) java反射
- Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件
- JAVA学习笔记(三十八)- 创建实现Runnable接口的线程
- Java学习笔记
- java学习笔记——socket编程
- java学习笔记10——多态
- JAVA WEB 学习笔记 Idea下常用配置-Hello Servlet。
- Java学习笔记48(DBUtils工具类一)
- java高级特性学习笔记
- 黑马程序员 java学习笔记——异常
- Kafka 学习笔记(三)之Java Consumer客户端
- (学习笔记) Java byte[]转二进制字符串,十六进制字符串的相互转换
- Java学习笔记2-一切都是对象
- java开发俄罗斯方块学习笔记 Day-6 布局
- java 学习笔记--Comparator中为什么其他类实现这个接口为什么没有复写equals(Object obj)这个方法?