java 继承

java 继承

1.概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

可以类比生物学中的门、纲、目、科、属、种这种对生物的等级层次划分。

比种高一级的是属,所有种具有属的所有特性,依次类推。

在面向对象语言中也是如此,可以定义一个Animal类,有cat,dog等类是属于动物的,因此可以继承Animal类。

class 父类名{

}
class 子类名 extends 父类名{

}
父类 parent class
超类 super class
//通常指直接上级
基类 base class
//通常指包括直接上级在内的上级的上级

关键字:extends

2.使用继承原因

提高代码复用率

举个例子,比如需要开发一个cat和一个dog类,二者有一个ID和一个name属性,以及一个介绍自己的方法,如果按一般方式就是创建两个类,两个类大体一样,这样,代码就有重复,导致代码臃肿。使用继承可以解决,如下:

public class Animal {
    private int id;
    private String name;

    public Animal(int id,String name){
        this.id=id;
        this.name=name;
    }

    public void introduct(){
        System.out.println("I'm No."+this.id+",my name is "+this.name+".");
    }
}


public class Cat extends Animal{

    public Cat(int id, String name) {
        super(id, name);
    }
}


public class Dog extends Animal{

    public Dog(int id, String name) {
        super(id, name);
    }
}

按照如上方式可以节省很多代码量,同时也便于管理代码

3.继承特性

子类拥有父类非private的属性,方法。

子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

子类可以用自己的方式实现父类的方法。

Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。

提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

子类不能继承父类的构造器(构造方法或者构造函数),如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句

如下例子说明:

public class Animal {
    private int id;

    public Animal(){
        System.out.println("animal  is created");
    }

    public Animal(int id){
        this.id=id;
        System.out.println("id:"+id+" animal is created");
    }
}


public class Cat extends Animal{

    private int id;

    public Cat(){
        super(2);
        System.out.println("cat is created");//交换这两句的位置报错
    }

    public Cat(int id){
        System.out.println("id:"+id+" cat is created");
        this.id=id;
    }

}


public class TestMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat1=new Cat(1);
        Cat cat2=new Cat();
    }

}

输出:
animal  is created
id:1 cat is created
id:2 animal is created
cat is created

4.特殊:

不允许继承类:

final class 类名{ } 
以final声明的方法不允许覆盖,以final声明的变量不允许更改。 
使用final可以构造一个只读类。

override:

子类父类定义了一样的方法,方法名及参数一样,但是,方法内容可以改变

overloads:

子类拥有父类同名的方法,但是两者参数类型或者参数数目不一样。

参考:

金旭亮Java编程系列

菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值