继承
- 在已有类的基础上,构建新的类一个类继承已有泪候,可以对被继承类中的属性和方法进行重用。
- 继承是类与类的一种关系,是一种"is a"的关系。
- 子类可以直接访问父类中的非私有的属性和方法,通过extends关键字实现。
- 好处: 提高代码的复用性
- 特点: 不允许多重继承,子类只能继承一个父类。
- 单继承(最多有一个直接父类),但可以有多层继承。
- 方法的重写: 子类对从父类继承的方法重新实现要求:
①子类覆盖方法的访问修饰范围必须大于或者等于父类对应方法的访问修饰符范围。
②子类覆盖方法的返回值类型必须和父类方法一致。
③参数类型,个数必须和父类方法的一致。
8.继承的初始化顺序:
①先初始化父类,再初始化子类。
②先执行初始化对象中属性,在执行构造方法中的初始化 - final关键字: ①修饰类,则该类不允许被继承。②修饰方法,则该方法不允许被重写。③修饰属性则该属性不会进行隐始的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
10.父类代码:
public class Fruit {
protected String name;//水果的名字
protected String shape;//形状
protected float price;//价格
public Fruit() {
super();
System.out.println("我是水果的父类");
}
public void showDesc(){
System.out.print("水果的名字:"+name+" 他形状为:"+shape+" 它的价格为:"+price);
}
}
子类的代码:
public class Apple extends Fruit{
private String color;//颜色
public Apple() {
super(); // TODO Auto-generated constructor stub
}
public Apple(String color) {
super();
this.color = color;
System.out.println(" 他的颜色为:"+color);
}
public void pingGuo(String name,String shape,float price){
super.name=name;
super.shape=shape;
super.price=price;
}
}
- Object 类是所有类的父类
- 在Object类里面定义toString()方法的时候返回的对象是哈希code码(对象地址字符串)。
代码:
public class Demo3 {
/** * Object类型创建一个String类型;Object是根类,是所有类的父类 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Object obj = "this is String"; System.out.println(obj instanceof Object);
System.out.println(obj instanceof String);
System.out.println(obj instanceof Date);
Demo3 d = new Demo3(); System.out.println(d);
}
}
结果运行如下:
true
true
false
Demo3@15db9742
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的规则
- 参数列表与被重写方法的参数列表必须完全相同。
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
- 父类的成员方法只能被它的子类重写。
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个类,则不能重写该类的方法。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
重载规则
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。