java高级类特性包括有:继承,方法重载、覆盖,多态,成员访问控制,关键字,封装类,抽象类和接口,对象的创建和初始化。
面向对象的三大特性:继承,封装,多态在上一篇 java基础:面向对象(三) 已经讲过了,这里就不多说了。
方法的重载、覆盖
重载(overloading method):方法重载是让类以统一的方式处理不同类型数据的一种手段。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法。
先看一个例子:
public class OverLoading {
public int receive(){
System.out.println("带返回值");
return 0;
}
public void receive(int i){
System.out.println("int: "+i);
}
public void receive(double i){
System.out.println("double: "+i);
}
public void receive(String s){
System.out.println("String: "+s);
}
public static void main(String[] args) {
OverLoading o=new OverLoading();
//根据传入的参数类型来决定调用不同的方法
int i=o.receive();
System.out.println(i);
o.receive(1);
o.receive(1.0d);
o.receive("hello");
}
}
上面有4个同名的receive方法,在使用时根据传入参数类型和个数来决定调用那一个方法,这种使用在java中很是常见。总结重载带有以下特征
一.方法名一定要相同。
二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了!
2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
三.方法的返回类型、修饰符可以相同,也可不同。
重写(也叫覆盖,overiding method):在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
class Parent{
public void receive(String s){
System.out.println("父类的receive方法"+s);
}
}
public class Overiding extends Parent{
@Override
public void receive(String s) {
System.out.println("子类的receive方法"+s);
}
public static void main(String[] args) {
Parent p=new Overiding();//多态
p.receive("hello");
}
}
关于方法重写的一些特性:
1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
根据2,3条是不是能确定第一条,子类方法的返回值必须是父类方法返回值的子类。
封装类
针对八种基本类型定义的引用类型
基本数据类型 | boolean | byte | short | int | long | char | float | double |
---|---|---|---|---|---|---|---|---|
封装类 | Boolean | Byte | Short | Integer | Long | Character | Float | Double |
封装类使得一个基本数据类型的数据变成了类,有了类的特定,就可以调用类中的方法
封装类用法示例:
int i = 500;
Integer t = new Integer(i);
int j = t.intValue();
// j = 500,intValue取出封装类中的数据
抽象类和接口
抽象类(abstract class):包含了抽象方法的一个类叫做抽象类,如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
即使不包括任何abstract方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。
注意:抽象类不能实例化
接口(interface):Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
对象的创建和实例化
流程1
1.产生对象并对成员变量默认初始化
2.对构造方法中的形式参数赋值
3.检查构造方法中是否有this语句 --->有则先走流程2 的(2-6),期间45一直追溯之Object类为止
4.super语句调用或隐式调用父类的构造方法--->有则先走父类流程 (2到6) ,期间45一直追溯之Object类为止
5.对当前类中的成员显示初始化
6.执行当前构造方法中的代码
如果没有this和super,流程是123456 按顺序正常走的,如果有this,在3的时候会先走完(2到6)后再接着走456,有super的话则4后先走其父类流程(2-6),如果是多重继承,如c继承b,b继承a,那么这个循环还是继续往上追溯,直到Object类为止。
假设构造器中分别有一个this和super,父类没有this和super(即不往Object追溯),执行流程为123(2,3,4,5,6)4(2,3,4,5,6)56
概念部分摘自百度百科,结合自己笔记总结得出,下一篇 java基础:常用类(五)