Java面向对象-继承(extends)
1. 面向对象的三大特性之二-继承(extends)
注意:构造器不能被继承!
父类的Private属性也不能被继承
注意!如果父类的构造函数是有参的,没有单独写无参构造函数(有有参的系统就不会自己再搞个无参的了),则子类必须手写有参构造方法,否则会报错,即父类构造器有参时,子类不能使用默认无参构造方法!
1) 继承的层次结构
Java中Object为所有类的父类,就算编码时没有写,java也会默认给所有类继承Object的所有属性;
一个父类可以有多个子类,一个子类只能有一个父类
2) 类继承的语法
public class Dog extends Animal{
与C++的不同:
Java中,一个类只能继承一个父类,即单继承!-》这个与C++不一致!
3) 重写- override
子类可以改写父类的的方法、命名以及与父类成员变量同名的成员变量
覆盖原则:
a) 覆盖方法必须有相同的方法名称、输入参数以及返回值类型
b) 子类不能比父类有更严格的访问权限
否则会报错:
c) 覆盖方法不能比父类方法抛出更多的异常
继承代码示例:
父类:
public class Animal { public int weight; private String name; public void setWeight(int w){ weight = w; } public int getWeight(){ System.out.println("getWeight:"+weight); return weight; } protected void eat(){ System.out.println( "我会吃" ); } public Animal(){ System.out.println("父类animal的构造器"); } }
子类:
public class Dog extends Animal{ public Dog(){ System.out.println("子类Dog的构造器");} }
实现:
public class Initial { public static void main(String[] args) { System.out.println("##"); Dog dog = new Dog(); dog.setWeight(23); dog.eat(); } }