类的封装体现在私有上 private
方法重载:
方法重载的条件如下:
-
方法名称相同:被重载的方法必须有相同的名称。
-
参数列表不同:
- 参数数量不同。
- 参数类型不同。
- 参数的顺序不同。
-
返回类型可以相同也可以不同:方法的返回类型可以相同也可以不同。但仅仅基于返回类型的不同是无法进行方法重载的。即使两个方法的返回类型不同,只要参数列表相同,它们仍然被认为是冲突的。
必须改参数!!!
类的继承
继承是子类利用父类中定义的方法和变量,当一个类拥有另一个类的所有数据和操作时,就称这两个类之间存在着继承关系。
Java中不支持类之间的多重继承。
我们通过在类的声明中加入extends子句来创建一个类的子类: class SubClass extends SuperClass {……} 如果缺省extends子句,则该类为java.lang.Object的子类。子类可以继承父类中访问权限设定为public、protected、default的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。
1. 方法重写也叫做方法覆盖,指在子类中重新定义父类中已有的方法。
2. 方法重写的条件: 如果能满足以下条件,那么我们就说子类中的方法重写了超类中的方法。 方法名、参数列表和返回值完全相同; 访问控制范围(public, protected, private, default)不能被缩小; 抛出的异常不能被扩大。
this和super的使用
this()方法与this关键字不同,this()方法代表的是一个构造方法对其他构造方法的调用。这里要特别注意的是,this() 必须放在构造方法的第一行,也就是说,它前面不能再有其他语句。
super有两种通用形式。第一种是调用父类的构造方法。当一个子类调用super()时,它调用它的直接父类的构造方法。这样,super()总是引用调用类直接的超类,这甚至在多层次结构中也是成立的。还有,super()必须是子类构造方法中的第一个执行语句。 第二种是用来访问被子类的成员隐藏的父类成员。super指这个对象的父类。super可以用来引用父类中的(被覆盖的)方法、(被隐藏的)变量及构造方法。
eg.
this:
package sample;
public class Employee {
private String name;
private int salary;
public Employee(String n, int s) {
name = n;
salary = s;
}
public Employee(String n) {
this(n, 0);
}
public Employee() {
//int a = 0; //错误!this() 必须放在构造方法的第一行
this( " Unknown " );
}
}
super :
public class Apple extends Fruit
{
public Apple(double price)
{
super(price);
super.var = value;
super.method(paraList);
}
}
继承中的构造方法调用
先运行父类 super构造再 子类构造。
而且如果super()没有被用到,那么每个父类的默认的或无参数的构造方法仍将执行。下面的例子阐述了何时执行构造方法。
在对对象进行垃圾收集前,Java运行时系统会自动调用对象的finalize() 方法来释放系统资源。该方法必须按如下方式声明:
protected void finalize() throws throwable
{ …… //释放本类中使用的资源 super.finalize(); }
多态
多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用“一个接口,多个方法”来描述,可以通过方法的参数和类型引用实现。
多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。