面向对象最重要的特点之一,就是可以实现对类的复用;通过“继承”一个现有的类,可以使用已经定义的类中的方法和变量。类的方法可以被继承,但是类的构造器不能被继承.类继承的基本语法:
- <modifier> class <name> [extends <superclass> ]
- {
- <declaration> *
- }
在Java中,一个类只能继承一个父类,这种方式叫做单继承。这一点和C++不一样。虽然一个类只可以继承一个父类,但是一个父类却可以被多个子类所继承。
Java中的所有类都有一个共同的父类:java.lang.Object.
对于继承:从子类的角度看,它是“继承(extends)”父类;而从父类的角度看,它是“派生(derive)”子类。它们指的都是同一个动作,只是角度不同而已。
类的继承的例子:
- public class Animal{
- protected int weight;
- public int getWeight(){
- return weight;
- }
- public void setWeight(int w){
- weight=w;
- }
- }
- public class Dog extends Animal{
- /**
- *子类新增方法
- */
- public void bark(){
- System.out.println("Wang~~Wang~~~");
- }
- }
- public class MyDog{
- public static void main(String args[]){
- Dog myDog = new Dog();
- myDog.setWeight(50);
- System.out.println("My Dog's Weight"+myDog.getWeight());
- myDog.bark();
- }
- }
接下来看这样一个例子:
- /**
- * 这是父类
- * @author Y_tao
- */
- public class Father {
- private void makePaper(){
- System.out.println("这是父亲的造纸厂");
- }
- public void computer(){
- System.out.println("这是父亲的计算机生产线");
- }
- }
- /**
- * 这是子类
- * @author Y_tao
- */
- public class Son extends Father{
- /**
- * Son现在要对从Father中继承过来的computer方法进行一些改变
- */
- public void computer(){
- System.out.println("子类重写了的父类的computer");
- }
- public void plane(){
- System.out.println("这是子类创建飞机制造厂");
- }
- }
当我们做如下调用时,结果是什么呢?
- public class Test {
- public static void main(String[] args){
- Father f = new Son();
- f.computer();
- }
- }
执行结果是:子类重写了的父类的computer
结论:子类的对象可以隐式转换给父类的引用,这个父类的引用f访问的就是子类中的方法,但是只能够访问从父类继承到子类中的方法子类中所特有的方法不能被访问