学点儿Java_Day7_继承、重载、重写、多态、抽象类

本文介绍了Java面向对象编程中的关键概念,包括继承的父子关系、访问修饰符的作用、重载和重写方法的区别、多态及其条件,以及抽象类和抽象方法的使用。
摘要由CSDN通过智能技术生成

1 继承

1.1 概念与理解

继承: 你继承谁你就是谁,继承是一种严格的父子关系(抽取到父类里面的属性和方法一定是所有子类所共有)
     (Student继承Person,那么Student就是人)
面向对象特征: 抽象、封装、继承、多态
OOP: Object Oriented Programming 面向对象编程
在这里插入图片描述
Java是单继承,就是一个类只能继承extends(inherit)一个类,而Java这种面向对象的语言就是对现实世界的描述,现实世界中是存在很多继承,但是java里面是支持实现多个接口
Object是所有类的父类(这个父类不一定是直接父类)

package com.sdust.day7;

import org.junit.Test;

//一个类不继承任何一个类,默认继承Object
public class Person /*extends Object*/{
    //private只在类的内部访问,子类也不行
    protected int id;
    protected String name;
    protected int age;
    //protected String className;

    public Person() {
        //Java里面new子类对象时候首先new父类对象
        super();//new Object();
    }

    public void show() {
        System.out.println("Person.show");
    }
}

1.2 访问修饰符(具体见这篇)

public:任何地方都可以访问
protected:子类可以访问
default:就是啥也不加,默认,本包和类内部可以访问,子类不能访问
private:只在当前类里面可以访问,子类不能访问
在这里插入图片描述
在这里插入图片描述

1.3 import

在这里插入图片描述
Java里面用到类需要import进来,本包的类不需要import,外部包的类需要import
特例:java.lang包放很多Java常用类像System、String,这个包的类下面不需要导包

1.4 自己不做Java默认帮我们做的工作

    ① 无参构造方法
    ② 一个类不继承任何一个类默认继承extends Object
    ③ 在类的构造方法第一句默认会加上super()

1.5 this、super总结

    this:代表当前类的对象 this.id=id
    super:代表父类对象
    this():调用当前类的无参构造方法
    super():调用父类无参构造方法

2 重载

重载(Overload)是指在同一个类中可以有多个方法拥有相同的名称,但是它们的参数列表不同。
Java通过方法的参数类型、个数或顺序来区分不同的重载方法。
最典型的重载:构造方法重载(无参构造方法、有参构造方法)

方法重载特点:与返回值无关,只看参数列表
对于方法 void show(int a, char b, double c){}

void show(int x, char y, double z){}   不是重载,是同一个方法
int show(int a, double c, char b){}    是重载,参数顺序不一样,和返回值无关
void  show(int a, double c, char b){}  是重载,参数顺序不一样
boolean show(int c, char b){}          是重载
void show(double c){ }                 是重载
double show(int x, char y, double z){} 不是重载(与返回值无关)

3 重写(@Override,覆盖)

父类中定义的方法子类不满意,子类重新定义这个方法,最典型的重写就是toString()
① 子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。
② 如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。

重载(Overload):同一个类中方法名一样参数列表不一样(如构造方法重载)
重写(Override):父子类中,父类中定义的方法子类不满意,子类重新定义这个方法

子类重新实现父类的方法称重写;重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改;仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类;要么就不修改,与父类返回值类型相同。

参考1
参考2
参考3(有些说法感觉不是很对)

4 多态

面向接口(抽象)编程
对修改封闭,对扩展开放(开闭原则)

多态存在的三个必要条件:
① 继承
② 重写
③ 父类引用指向子类对象 Cal cal = new Add();

在这里插入图片描述
在这里插入图片描述
支持多态后,函数传参会很方便,省了重载的代码量

public void jiSuan(Cal cal) {//这一个函数,就等于+-*/四个函数
    cal.getResult();
}

public void jiSuan(Add add) {
    add.getResult();
}

public void jiSuan(Sub sub) {
    sub.getResult();
}

在这里插入图片描述

Circle circle = new Circle();
circle.draw();

Shape shape = new Circle();
shape.draw();
shape = new Square();
shape.draw();

//面向接口编程
public void draw(Shape shape) {
   shape.draw();
}
public void draw(Circle circle) {
   circle.draw();
}
public void draw(Square square) {
   square.draw();
}
public void draw(Shape shape) {
    shape.draw();
}

在这里插入图片描述

5 抽象类

① 抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
② 如果这个类是抽象类,并不要求这个类一定要有抽象方法
③ 抽象类里面可以有普通方法,也可以有抽象方法。
如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。
抽象方法可以理解为 父类(抽象类)定义的一个模板或者规范(自己本身不实现),子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。

例如,父类Cal,表示+ - * /运算的父类,继承父类Cal的getResult( )方法以输出各自运算的结果,那么父类Cal可以像下面这样写,但是父类中的getResult( )方法本身没有意义(它并不需要也无法实现这个方法,只需它的子类实现各自的getResult( )即可),但为了保证重写的条件(子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型),又必须要有返回值。如果不想这样写,我们可以将父类的getResult( )变为一个抽象方法,相应地,Cal类也必须变为一个抽象类。

public class Cal {
    protected int num1;
    protected int num2;

    //抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
    //public abstract int getResult();

    //方法签名
    public int getResult() {//大括号:方法体
        //为了不让他报错
        return 0;
    }
    
}
public abstract class Cal {
    protected int num1;
    protected int num2;

    //抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
    public abstract int getResult();

    //方法签名
    /*public int getResult() {//大括号:方法体
        //为了不让他报错
        return 0;
    }*/
    
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值