java面向对象的特性之---继承

1.什么是继承?

现实中的继承,比如父亲有一套房子,儿子可以继承,可以拥有。同理,Java中,被继承的叫父类,子类继承的是父类里面的东西。类里面有什么东西?有属性和有方法。所以子类继承的就是父类的属性和方法。

语法格式:

class 父类名{

}

class 子类名 extends 父类名{

}

2.在代码中如何体现?

package com.a_extends;
class Person{
    String name;
    int age;

    public Person() {
        System.out.println("父类无参构造被调用");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void speak()
    {
        System.out.println("我的名字叫做"+name+",我今年"+age+"岁,");
    }
}

//继承
class Student extends Person{
    String school;

    public Student() {
        System.out.println("子类的无参构造被调用");
    }

    public Student(String name, int age, String school) {
        super(name, age);//super关键字说明这个方法是来自父类
        this.school = school;//this关键字说明这个方法来自本身
    }

    void study ()
    {
        System.out.println("我在"+school+"读书");
    }
}
public class test1 {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name = "廖凡";
        Student student = new Student("彭于晏", 24, "河南大学");
        student.speak();//子类可以调用父类的方法
        student.study();
        student1.speak();
    }
}

程序分析:

当我们new一个子类对象的时候,首先调用父类的无参构造和有参构造,构造方法在newe对象的时候执行,然后父类成员变量被赋予属性

子类可以调用父类的方法,可以拥有父类的成员变量。

运行结果:

如果子类想要在拥有父类的属性,需要注意一下几点:

  1. 在父类里需要写有参构造,在子类里才能构造出来,并且调用(super关键字调用)
  2. 父类的成员属性不能是private类型的

3. 方法的重写

当子类中的方法和父类中的方法的方法名,返回值,参数类型完全一致的时候,则可以说子类对父类的方法进行了重写。

为什么要重写?

父类的方法可能不太适合子类

​
package com.a_extends;

class Dog
{
    String name;
    int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public  String spreak()
    {
        return "我是一只"+this.name+",活了"+this.age+"年的狗";
    }
}

class LittleDog extends Dog{
    String kinds;

    public LittleDog(String name, int age, String kinds) {
        super(name, age);
        this.kinds = kinds;
        this.age = age;
    }
    //重写父类方法,参数名和方法名以及返回值与父类完全一直,只是方法体不一样
    public String speak()
    {
        return "我是一只"+this.kinds;
    }
}
public class test3 {
    public static void main(String[] args) {
        LittleDog littleDog = new LittleDog("嬴政", 1, "哈士奇");
        System.out.println(littleDog.speak());//重写以后,则调用子类的speak()方法
    }
}

​

运行结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值