Java中的继承


一、继承

1、继承的概念

现实生活中,说到继承,通常会想到子女继承父辈的财产、事业等。在程序中,继承描述的是事物之间的从属关系,通过继承可以使多种事物之间形成一种关系体系。 例如,猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫继承猫,而沙皮狗和斑点狗继承自狗。上述动物继承关系如图所示。
在这里插入图片描述
在Java中,类的继承是指在一个现有类的基础上构建个新的类,构建的新类被称作子类。子类会自动继承父类的属性和方法,使得子类具有父类的特征和行为。

2、关键字(extends)

在Java程序中,如果想声明一个类继承另一个类,需要用extends关键字,其语法格式如下:

class 父类{
	……
}
class 子类 extends 父类{
	……
}

3、示例

下面举例来看子类是如何继承父类的

代码如下(父类):

public class Animal {
    private String name; //声明name属性
    private  int age; //声明age属性
    public final  String color = "金色"; // 定义color属性

    public String getName() { //定义name属性的getter方法
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() { //定义age属性的getter方法
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

代码如下(子类):

//定义Dog类继承Animal类
public class Dog extends Animal{
}

代码如下(测试类):

//定义测试类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();      //创建Dog类对象
        dog.setName("大黄");     //调用父类的Animal的setter方法
        dog.setAge(2);     //调用父类的Animal的setter方法
        System.out.println("名称:"+dog.getName()+",年龄:"+dog.getAge()+",颜色:"+dog.color);
    }
}

上述代码中,Dog类通过extends关键字继承了Animal类,这样 Dog 类便成了 Animal 类的子类。Dog 类中并没有定义任何属性和方法。因为父类 Animal 中name 属性和 age 属性使用 private 关键宇修饰,即name 属性和 age属性为 Animal 类的私有属性,所以需要使用getter 方法和 setter 方法访问。测试代码在main()方法中创建了一个 Dog 类的对象 dog,并使用实例对象 dog 访问父类 Animal 中name 和age 属性的 setter 方法设置名称、年龄的值。测试类代码通过 dog 对象访问父类 Animal 中 name 属性和age属性的getter 方法获取名称、年龄的值,通过 dog 对象直接访问了 Animal 类中的非私有属性color 获取颜色的值。

4、运行结果

在这里插入图片描述

控制台打印了“名称:大黄,年龄: 2,颜色:金色”,说明子类Dog虽然没有定义任何属性和方法,但是能调用父类Animal的方法。这证明了子类在继承父类的时候会自动继承父类的属性和方法。
子类除了可以继承父类的属性和方法,也可以定义自己的属性和方法。下面修改文件,子类Dog中增加color属性和相应的getter和setter方法。

代码如下(父类):

public class Animal {
    private String name; //声明name属性
    private  int age; //声明age属性


    public String getName() { //定义name属性的getter方法
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() { //定义age属性的getter方法
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


代码如下(子类):

//定义Dog类继承Animal类
public class Dog extends Animal{
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

代码如下(测试类):

//定义测试类
public class Main {
    public static void main(String[] args) {
        Dog dog =new Dog();  //创建Dog类对象
        dog.setName("大黄"); //调用父类的Animal的setter方法
        dog.setAge(2); //调用父类的Animal的setter方法
        dog.setColor("白色");
        System.out.println("名称:"+dog.getName()+",年龄:"+dog.getAge()+",颜色:"+dog.getColor());
    }
}

在上述代码中,Dog类不仅继承了Animal类中的属性和方法,还增加了color属性以及对应的getter和setter方法。在main()中,通过dog对象调用Animal类的setter方法设置名称和年龄;通过dog对象调用Dog类的setter方法设置颜色;通过对dog对象调用Animal类和Dog类的setter方法获取名称、年龄、和颜色。

运行代码如下

在这里插入图片描述
由上图可知,程序成功设置并获取了 dog 对象的名称、年龄和颜色。
需要注意的是,子类虽然可以通过继承访问父类的成员和方法,但不是所有的父类属性和方法都可以被子类访问。子类只能访问父类中用public和protected修饰的属性和方法父类中被默认修饰符default和private修饰的属性和方法不能被子类访问。

在类的继承中,需要注意一些问题
(1)在Java 中,类只支持单继承,不允许多继承。也就是说,一个类只能有一个直接父类,例如下面这种情况是不合法的:

class A{} 
class B{}
class C extends A,B{} //C类不可以同时继承A类和B类

(2)多个类可以继承一个父类,例如下面这样的情况是允许的:

class A{}
class B extend A{} //B类继承A类
class C extends A{} //C类继承A类

(3) 在Java 中,多层继承也是可以的,即一个类的父类可以再继承另外的父类。例如,C类继承B类,而B类又可以继承 A 类,这时,C 类也可称作 A类的子类。例如下面这种情况是允许的。

class A{}
class B extend A{} //B类继承A类
class C extends B{} //C类继承B类

(4)在Java中,子类和父类是相对的,一个类可以是某个类的父类,也可以是另外一个类的子类。

三、方法的重写

1、重写的概念

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些改写,即对父类的方法进行重写。在子类中重写的方法需要和父类中被重写的方法具有相同的方法名、参数列表以及返回值类型

2、示例

代码如下(父类):

//定义Animal类
public class Animal {
    //定义动物叫的方法
    void shout(){
        System.out.println("动物发出了叫声");
    }
}

代码如下(子类):

//定义Dog类继承Animal类
//定义Dog类继承Animal类
public class Dog extends Animal{
    //重写父类shout()方法
    @Override
    void shout() {
        System.out.println("汪汪汪…………");
    }
}

代码如下(测试类):

//测试类
public class Main {
    public static void main(String[] args) {
       Dog dog = new Dog();
       dog.shout();
    }
}

在上述代码中,在定义的Animal类中定义了shout()方法。在子类Dog类中继承了父类的方法,并且重写了父类Animal的shout()方法。测试类中实例化了Dog对象并且通过dog对象调用了shout()方法。

3、运行结果

在这里插入图片描述
由上述图可知,控制台打印了"汪汪汪………",调用的是Dog类的shuot()方法中的输出语句,说明dog对象调用的是Dog子类重写的shout()方法,而不是父类中的shout()方法。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Java继承的概念,并且介绍了Java中继承的使用是用extends关键词。还介绍了如果子类需要改写父类的方法,我们需要对子类继承父类的方法进行重写。介绍了重写的使用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值