面向对象的梳理(3)面向对象的特征之继承

目录

1.什么是继承?

2.为什么使用继承?

3.如何使用继承?

4.访问修饰符有哪几种?分别有什么特点?

5.关于super

6.方法的重写

(1)什么是方法的重写?

(2)为什么要进行方法的重写?

(3)怎样进行方法的重写?

7、Object

8、抽象类

(1)为什么要使用抽象类?

(2)什么是抽象类抽象方法?

9、关于final


1.什么是继承?

比如我国封建社会的皇权继承制,儿子继承父亲的皇位就叫继承。

2.为什么使用继承?

在多个类中可能有重复的代码,我们将重复的代码抽取到父类中,以减少代码的冗余。

3.如何使用继承?

使用关键字extends:

如以下代码:

父类Female:

public abstract class Female {
    private String name;
    private int age;
     double shiYu;

    public Female() {
    }

    public Female(String name, int age, double shiYu) {
        this.name = name;
        this.age = age;
        this.shiYu = shiYu;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public double getShiYu() {
        return shiYu;
    }

    public void setShiYu(double shiYu) {
        this.shiYu = shiYu;
    }

    @Override
    public String toString() {
        return "Female{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", shiYu=" + shiYu +
                '}';
    }
    public abstract void   goRestraunt();
}

子类Girl :

public class Girl extends Female{
    int health;

    public Girl() {
    }

    public Girl(int health) {
        this.health = health;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    @Override
    public String toString() {
        return "Girl{" +
                "health=" + health +
                '}';
    }
    public void  goRestraunt(){
        System.out.println("今天想吃好吃的。");
        System.out.println();
    }
    public void goToWork(){
        if (health<80){
            System.out.println("今天不想上班。");
            System.out.println();
        }else if (health>=80){
            System.out.println("又是元气满满的一天呐。");
            System.out.println();
        }

    }
}

 BoyFriend类:

public class BoyFriend {
    public void restraunt(Female female){
        if (female.getShiYu()>80){
            female.goRestraunt();
        }else {
            System.out.println("今天只想和杜哥哥去散心。");
            System.out.println();
        }
    }
    public void toWork(Female female){
        if (female instanceof Girl) {
           Girl girl = (Girl) female;
            girl.goToWork();
        }
    }
}

TestBoyFriend类:

public class TestBoyFriend {
    public static void main(String[] args) {
      Boyfriend  boyfriend=new  Boyfriend();
      Female female=new Girl();
      female.setName("");
      female.setAge(23);
     Girl girl=new Girl();
      Scanner scanner=new Scanner(System.in);
        System.out.println("姓名:"+female.getName());
        System.out.println("年龄:"+female.getAge());
        for (int i = 0; i < 2; i++) {
            System.out.println("请输入今天的食欲:");
            female.shiYu=scanner.nextDouble();
            Boyfriend .restraunt(female);
            System.out.println("是否退出:Y/N");
            String select=scanner.next();
            if (select=="Y"){
                break;
            }
        }
        for (int i = 0; i <2 ; i++) {
            System.out.println("请输入今天的健康指数:");
            girl.health=scanner.nextInt();
            Boyfriend .toWork(female);
            System.out.println("是否退出:Y/N");
            String select=scanner.next();
            if (select=="Y"){
                break;
            }
        }

    }
}

4.访问修饰符有哪几种?分别有什么特点?

private:私有的只能在本类中访问。

default:只能在本类和同包中使用。

protected:本类、同包以及其子类可以访问。

public:公共的,处处可访问

5.关于super

关于super后面会在在面向对象地关键字章节中对其进行详细介绍,现在先简单了解其用法。

super.属性:调用父类中属性。

super.方法:调用父类中方法。

super.构造方法:调用父类中的构造方法。(需要放于首行)

6.方法的重写

(1)什么是方法的重写?

a、出现在有子父类的情况下

b、方法名和参数列表都需要相同

c、返回值类型相同或者是其子类

d、访问修饰符的权限不能严于父类

(2)为什么要进行方法的重写?

方法的重写是指在子类中重新定义(覆盖)父类中已有的方法。Java中使用方法的重写可以达到以下效果:

1. 扩展原有的方法功能:子类重写父类的方法可以添加新的功能和逻辑,从而增强原有方法的功能,使之更加强大。

2. 改进原有方法的实现:子类重写父类的方法可以改进原有方法的实现,提高方法的性能和效率。

3. 更好的代码复用性:当多个类中含有相同的方法时,使用方法的重写,可以使子类继承父类的公共方法,从而减少代码重复。

4. 实现多态性:Java中的多态性指的是同一个方法被不同的对象调用时,可以有不同的表现形式。子类重写父类的方法可以实现多态性,从而使程序更加灵活。

总之,使用方法的重写有助于提高代码的可维护性、可扩展性和可读性,是Java中面向对象编程的基础。

(3)怎样进行方法的重写?

其实关于这一点我们早在第一篇文章中就已经提到并重写了equals方法。现在我们再来简单概括总结一下:

重写前:

public Pet method(){
  return new pet();
}

重写后:

public Dog method(){
  return new Dog();
}

7、Object

在Java中,Object类是所有类的根类,即是所有类的父类。它包含一些通用的方法,可以被所有子类继承和使用,例如:equals()、toString()、hashCode()、getClass()等方法。由于所有的类都是Object类的子类,因此Object类提供了一些通用的方法,可以被所有的子类继承和使用。因此,Object类在Java中具有非常重要的地位。

8、抽象类

我们在前文中已经用到了抽象类,现在我们对其进行详细介绍:

(1)为什么要使用抽象类?

Java中的抽象类提供了一种机制,用于定义不能被实例化的类,并且这些类只能被继承。这些类通常包含抽象方法,这些方法没有实现,但是需要在子类中实现。以下是使用抽象类的一些原因:

1. 实现代码重用:如果一个类需要在多个相关类中实现相同的功能,那么可以使用抽象类来实现这些功能。子类可以继承抽象类,并且可以重写其中的方法以满足它们的特定需求。

2. 实现类和接口之间的中间状态:抽象类是介于类和接口之间的中间状态。它可以实现一些方法,并且可以定义抽象方法,这些方法需要在子类中实现。这种灵活性使得抽象类成为实现类和接口之间的优秀桥梁。

3. 限制类的实现:如果一个类不希望被实例化,又希望提供一些默认的实现,那么可以使用抽象类。由于抽象类不能被实例化,所以只能被子类继承并且实现其中的方法。

总体而言,抽象类为Java提供了一种非常重要的设计模式,它可以帮助开发人员构建可维护和可扩展的代码。

(2)什么是抽象类抽象方法?

a.抽象方法必须在抽象类中,抽象类中不一定有抽象方法。

b.子类继承抽象的父类需要实现父类的所有方法,除非是子类也是抽象类。

c.抽象类没有方法体。

d.抽象类不能创建对象。

9、关于final

final意为最后的,被final修饰过的属性不能被修改,修饰的类不能被继承,修饰的方法不能被重写。详细代码将于关键字章节中展现。

关于继承的知识点到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值