Java开发学习(3)-面向对象中的继承和多态学习总结

举报
zekelove 发表于 2021/07/16 09:44:42 2021/07/16
【摘要】 Java开发学习(3)-面向对象中的继承和多态的相关知识学习和总结,带你走进Java的面向对象开发。

在我们学习完Java的基础知识以后,就要开始Java的面向对象开发,首先学习和了解一下继承和多态的相关概念和语法,以及它们有哪些特性,在哪些应用场景中使用它们。

继承

继承就是子类继承父类的特征和行为,使子类对象(实例)具有父类的实例和方法,使子类具有父类相同的行为。继承需要符合的关系是:is-a,父类更通用,子类更具体。使用继承可以有效实现代码复用,避免重复代码的出现。如:学校中的老师和学生都属于人,食草和食肉动物都属于动物,可以把共有的特性可以作为父类,自有的特性为子类。

关键字

继承使用 extends 和 implements 这两个关键字来实现继承,且所有的类都是继承于Object,如果一个类没有继承关键字,默认继承Object。继承是单一继承,只能继承一个类。

语法:

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

继承类型

Java中不支持多继承,但是支持多重继承。如下图:


java-extends-2020-12-08.png

继承特性

1.子类拥有父类非 private 修饰符的属性和方法;

2.子类可以拥有自己的属性和方法;

3.子类可以自己实现父类的方法;

4.继承是单一继承,但可以多重继承;

5.提供类之间的耦合度,但是降低了代码独立性。

实例:

// 创建父类 Person
public class Person {
    String name;
    int sex;
    int age;
    public Person() {
        this.name = "Person";
        System.out.println("调用Person构造函数");
    }
    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    public String toString() {
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex;
    }
}
// 创建子类 Teacher
public class Teacher extends Person {
    public Teacher(String name, String sex, int age) {
        //super访问父类成员,必须第一行
        super(name, sex, age);
        System.out.println("调用父类属性age:" + super.age);
    }
    public String toString() {
        return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex ;
    }

    public static void main(String[] args) {
        Teacher tea = new Teacher();
        System.out.println(tea.toString());
    }
}

多态

多态就是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口使用不同的实例而执行不同操作。

多态存在的必要条件:继承,重写,父类引用指向子类对象。

转化原则

1.子类对象可以当做父类对象使用

2.父类对象不能当做子类对象使用

3.如果父类引用的是子类对象,那么该父类引用可以通过强制转化成子类对象使用

优势

1.消除类型之间的耦合关系

2.接口性

3.可扩充性

4.可替换性

5.灵活性

6.简化性


实例:

// 创建父类 Shape
class Shape {
    void draw() {
        System.out.println("Shape.draw()");
    }
}
 // 创建子类 Circle
class Circle extends Shape {
    void draw() {
        System.out.println("Circle.draw()");
    }
    double area(double r) {
        System.out.println("Circle.area()");
        double area = Math.PI * Math.pow(r, 2);
        return area;
    }
}
 // 创建子类 Square
class Square extends Shape {
    void draw() {
        System.out.println("Square.draw()");
    }
}
// 创建测试类 Test
public class Test {
    public static void main(String[] args) {
        show(new Square());  // 以 Square 对象调用 show 方法
        show(new Circle());  // 以 Circle 对象调用 show 方法

        Shape a = new Circle();  // 向上转型
        a.draw();                     // 调用的是 Circle 的 draw
        Circle c = (Circle)a;        // 向下转型
        System.out.println(c.area(1));// 调用的是 Circle 的 area
    }

    public static void show(Shape a)  {
        a.draw();
        // 类型判断
        if (a instanceof Circle)  {  // 圆做的事情
            Circle c = (Circle)a;
            c.draw();
        } else if (a instanceof Square) { // 正方形做的事情
            Square c = (Square)a;
            c.draw();
        }
    }
}

多态的实现方式

1.重写

2.接口

3.抽象类和抽象方法

后续我们再来学习接口,抽象类的相关知识。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。