java特性
来源:互联网 发布:exe制作软件 编辑:程序博客网 时间:2024/06/06 15:47
`1. 抽象
抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。就如在设计时的一个父类,主要用在了继承和接口这两个应用广泛的案列。
2. 继承
其实质就是用到了桥梁模式(@http://www.cnblogs.com/java-my-life/archive/2012/05/07/2480938.html)抽象出共同的属性,减少冗余重复的内容。使设计更清新明了。
3.封装
即对外只提供接口(告诉消费者这个接口是干什么的),而实现细节隐藏起来由提供方实现。这样有利于代码的阅读和简洁,以及消费者更简单的去操作。
4.多态
是java最最核心的特性,封装和继承几乎都是为多态而准备的。
简单的说主要有方法重载和方法重写。
方法重载:编译时的多态性(也称为前绑定)-决定于方法的参数,方法名相同而参数的类型或者个数不同。调用一个方法由参数的类型和参数的个数来决定到底如何去实现这个方法。
方法重写:运行时的多态性(也称为后绑定)-决定于new的对象,使用@override注解进行标记。方法的执行由new 的对象来决定,new 的对象不同在调用此方法时执行的结果也会有不同。即在运行期间来绑定具体使用哪一个方法
要使用多态必须满足三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
可以参考如下代码来做一些进一步的理解
/** * A中的方法为重载 * Created by daiwei on 2017/10/21. */public class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } public static void main(String[] args) { A a1 = new A(); //new 的是b对象,但a2已声明是A类型 A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); /** * 因为new 的是A对象只会调用父类的方法,无论是b还是c都可以上溯到A类型。 * 因为d对象已经能绑定到A中的方法了,顾无需再上溯造型 */ System.out.println(a1.show(b)); System.out.println(a1.show(c)); System.out.println(a1.show(d)); /** * 因为new 的是b对象,故方法会执行b中重写的方法, * 只有在子类没有此方法而父类有时才会调用父类的方法 * a2.show(b)和a2.show(c)因为a2已声明是A类型,即只会执行A类型的相关方法, * 而不会去执行A中没有的方法。 */ System.out.println(a2.show(b)); System.out.println(a2.show(c)); System.out.println(a2.show(d)); /** * 因为b中没有引用父类对象故b上溯到b,c上溯到b */ System.out.println(b.show(b)); System.out.println(b.show(c)); System.out.println(b.show(d)); }}class C extends B{}class D extends B{}class B extends A { /** * 此方法并没有重写父类方法 * @param obj * @return */ public String show(B obj) { return ("B and B"); } @Override public String show(A obj) { return ("B and A"); }}
执行结果为:
A and AA and AA and DB and AB and AA and DB and BB and BDisconnected from the target VM, address: '127.0.0.1:50477', transport: 'socket'A and D
5.对象的声明和对象的创建
对象声明只是告诉大家他是属于那种类型,就如指针一样没有具体的值。
而对象创建就是为这个已声明的类型赋予实际的空间就是实际值。故对象的声明和对象的创建是不同的,是有先后顺序的,先声明后创建
举个例子
Person p1=new Person();语句实际上同时完成了对象的声明与创建,可以分开这样写:
Person p1;
p1=new Person();
声明对象只在栈中声明指针类型的变量,不在内存中存储具体的数值,而只存放另一块堆中内存的地址。创建对象在java中一般用new关键字, p1=new Person();这行代码一共做了两件事情:第一件是在堆中分配一块存放学生具体数值的内存,第二件是把这个内存的首地址赋给上面声明的指针变量。下面我们就可以通过对象名.属性名访问具体属性了。对象必须创建后才能使用,如果只声明不创建,那么调用对象属性和方法时将会报空指针异常(NullPointerException)。
@see http://www.cnblogs.com/rzhy007/p/4631637.html
参考资料有
1)http://www.importnew.com/22083.html
- java特性
- java特性
- java特性
- Java特性
- java特性
- Java特性
- java特性
- java的动态特性
- java高级语言特性
- Java接口特性
- java string特性
- Java EE 6特性
- Java接口特性
- java 高级特性
- JAVA EE5 新特性
- Java面向对象特性
- Java面向对象特性
- Java主要特性
- QEMU内存管理APIs
- 自定义python自建类型(二)实战
- 自定义python自建类型(三)优化
- 自定义python自建类型(四)一致性测试
- 对于浮动的定义我遗漏了什么
- java特性
- docker拾遗
- java并发编程--Runnable Callable及Future
- linux下PHP的命令行模式介绍
- NFS服务基本配置及使用
- Wannafly模拟赛4 B题 Distance 【最大曼哈顿距离】
- LAMP安装教程
- 3 寄存器(内存访问)
- 关于内存的分配问题