首页 > 编程语言 >java学习总结(五)继承、重载、重写、多态

java学习总结(五)继承、重载、重写、多态

时间:2025-01-19 23:03:14浏览次数:3  
标签:java num1 int 子类 多态 重载 父类 public

一、继承

继承:你继承谁你就是谁,继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)

(Student继承Person,那么Student就是人)

//使用继承的好处

可以把多个子类中重复的代码抽取到父类中,提高代码的复用性

子类可以在父类的基础上,增加其他功能,使子类更强大

//什么时候使用子类

当类与类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

java支持单继承,不支持多继承,但支持多层继承

继承中成员变量访问特点:就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上.

继承中成员方法的访问特点:直接调用满足就近原则,super调用,直接访问父类

继承中构造方法的访问特点:

1;父类中的构造方法不会被子类继承

子类中所以的构造方法默认先访问父类中的无参构造,再执行自己,因为子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化

2;怎样调用父类构造方法

子类构造方法的第一行语句默认都是super(),不写也存在,且必须在第一行

UML类图(描述类与类之间的关系)

父类:person

public class Person {
    //一个类不继承任何一个类,默认继承Object
    //希望被子类继承,用protected
    protected int id;
    protected String name;
    protected int age;

    public Person(){

    }
    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public void show(){
        System.out.println("Person.show");
    }
}

子类:student(student show方法里super.show)

public class Student extends Person {
     int id;
     String name;
     int age;

    public Student(){

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

   public void show(){
         super.show;
        System.out.println("student.show");
    }
    public void study(){
        System.out.println("Student.student");
    }
 

Test类

访问修饰符

import:

Java里面要到类需要import进来,本包的类不需要import,外部包需要import

特例:java.lang包放很多Java常用类像System、String,这个包下面是不需要导包

this、super总结:
  1. this:代表当前类的对象 this.id=id
  2. super:代表父类对象
  3. this():调用当前类的构造方法
  4. super():调用父类构造方法

二、重载

重载(Overload)是指在同一个类中可以有多个方法拥有相同的名称,但是它们的参数列表不同。

Java通过方法的参数类型、个数或顺序来区分不同的重载方法。

最典型的重载:构造方法重载(无参构造方法、有参构造方法)

方法重载特点:与返回值无关,只看参数列表。

void show(int a, char b, double c){}

1、void show(int x, char y, double z){} 不是重载,是同一个方法

2、int show(int a, double c, char b){} 是重载,参数顺序不一样,和返回值无关

3、void show(int a, double c, char b){} 是重载,参数顺序不一样

4、boolean show(int c, char b){} 是重载

5、void show(double c){ } 是重载

6、double show(int x, char y, double z){} 不是重载

三、重写

重写(覆盖)@Override

父类中定义的方法子类不满意,子类重新定义这个方法,最典型的重写就是toString()

1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。

2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。

父类方法:

子类重写父类方法:

四、多态

在person父类,student,teacher子类中; student= new student(); person = new student(); //学生是学生,学生也是人;就是多态
多态:同类型的对象,表现出的不同形态 多态的表现形式: 父类类型 对象名称 = 子类对象;
多态调用成员的特点 1:调用成员变量:编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变                                     量,如果有编译成功,如果没有编译失败                               运行也看左边:java运行代码的时候,实际获取的就是左边父类中成员变                                量的值 2:调用成员方法:编译看左边                                运行看右边:运行代码的时候,实际运行的是子类的方法
Java 多态(Polymorphism)是面向对象编程的一项核心概念,它允许对象以多种形式出现。 多态性在Java中有两个主要的表现形式:
  1. 编译时多态(也称为静态多态)
  2. 运行时多态(也称为动态多态)
编译时多态是通过方法重载(Method Overloading)实现的。这意味着在同一个类中可以定义多个方法,这些方法具有相同的名字但参数列表不同。编译器在编译时根据参数列表来决定调用哪个具体的方法。 这里大家只要知道多态还有编译时多态这种形式就可以,重点还是运行时多态。

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

 Cal类:
public abstract class Cal {
    protected int num1;
    protected int num2;

    public Cal() {
    }

    public Cal(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }
    public abstract int getResult();

    public int getNum1() {
        return num1;
    }

    public void setNum1(int num1) {
        this.num1 = num1;
    }

    public int getNum2() {
        return num2;
    }

    public void setNum2(int num2) {
        this.num2 = num2;
    }
}
Add类
public class Add extends Cal{
    public Add() {
    }

    public Add(int num1, int num2) {
        super(num1, num2);
    }
    @Override
    public int getResult(){
        return num1 + num2;
    }
}
Sub类
public class Sub extends Cal {
    public Sub() {
    }

    public Sub(int num1, int num2) {
        super(num1, num2);
    }
    @Override
    public int getResult(){
        return num1-num2;
    }
}
 MUL类
public class MUL extends Cal{
    public MUL() {
    }

    public MUL(int num1, int num2) {
        super(num1, num2);
    }

    @Override
    public int getResult(){
        return num1*num2;
    }
}

 TEST类
public class Test {

    public static void main(String[] args) {

       Add add = new Add(3,5);
       System.out.println(add.getResult());//8

        Cal cal=new Add(2,5);
        int result1=cal.getResult();
        System.out.println(result1);//7

        cal=new Sub(8,4);//多态
        int result2=cal.getResult();
        System.out.println(result2);//4

        MUL mul=new MUL(2,4);
        jisuan(mul);
    }
    public static void jisuan(Cal cal){
        cal.getResult();
    }
}

标签:java,num1,int,子类,多态,重载,父类,public
From: https://blog.csdn.net/weixin_63618344/article/details/145213726

相关文章

  • 第11篇:从入门到精通:掌握python特殊方法与运算符重载
    第11篇:特殊方法与运算符重载内容简介本篇文章将深入探讨Python中的特殊方法(魔术方法)与运算符重载。您将学习如何使用魔术方法(如__init__、__str__、__repr__等)来定义对象的基本行为,掌握运算符重载的技巧,实现自定义对象的比较与运算。通过丰富的代码示例,您将能够灵活地扩展......
  • 高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模
    如果有遗漏,评论区告诉我进行补充面试官:MyBatis中见过什么设计模式?我回答:1.工厂模式(FactoryPattern)定义:工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,将对象创建过程抽象化,从而提高代码的可维护性和灵活性。在MyBatis中的应用:SqlSessionFactoryBui......
  • Java中的算法优化与复杂度分析
    1.算法优化的重要性在Java开发中,算法优化至关重要。高效的算法不仅可以提升程序运行速度,还能降低资源消耗,改善用户体验。优化算法需要综合考虑时间复杂度和空间复杂度,以找到最佳的解决方案。2.时间复杂度时间复杂度表示算法运行时间随输入规模变化的增长率。常见的时间复杂度......
  • Java开发史上10位牛人
    在Java的发展历程中,确实涌现出了众多杰出的人物,他们各自在Java的不同领域做出了卓越的贡献。以下是Java中的十大关键人物:‌JamesGosling(Java之父)‌加拿大计算机科学家,Java编程语言的最初设计者、实现者。在SunMicrosystems(现为OracleCorporation的一部分)工作期间,领导了Ja......
  • Java几种常见的内存溢出及其解决方法
    java.lang.OutOfMemoryError:Javaheapspacejava.lang.OutOfMemoryError:GCoverheadlimitexceededjava.lang.OutOfMemoryError:Unabletocreatenewnativethreadjava.lang.StackOverflowError微信扫码查看:JAVA基础之内存机制.pptx......
  • Java 面向对象
    面向对象类(设计图):对象共同特征的描述对象:真实存在的具体东西publicclass类名{1.成员变量2.成员方法3.构造器4.代码块5.内部类}用来描述一类事物的类叫Javabean类,类中不写main方法编写main方法的类叫测试类封装对......
  • Java 基础 API
    APIAPI:应用程序编程接口,即已经写好的东西,可以直接使用String字符串的内容是不会更改的Stringname="abc";name="def";//name="def"是创建了一个新的字符串,然后把引用赋给了name构建方法Strings="abc";//直接赋值Strings=newString();/......
  • 【详解】ElasticSearchJava操作ES实例
    目录ElasticSearchJava操作ES实例简介环境准备1.安装Elasticsearch2.添加依赖连接Elasticsearch1.创建客户端2.关闭客户端基本操作1.创建索引2.插入数据3.查询数据环境准备示例代码代码说明运行代码1.添加依赖2.创建客户端3.索引文档4.查询......
  • 【详解】JavaSpringMVC+MyBitis+多数据源切换
    目录JavaSpringMVC+MyBatis+多数据源切换1.环境准备2.添加依赖3.配置多数据源4.创建数据源配置类5.动态数据源切换5.1动态数据源类5.2数据源上下文持有者5.3切面管理数据源选择5.4自定义注解6.使用示例6.1UserMapper6.2OrderMapper6.3Service......
  • Java锁 死锁及排查 JVM 工具 jconsole 工具 排查死锁
    目录概述死锁案例(面试)如何排查死锁使用JVM工具排查死锁使用jconsole工具排查死锁细节概述死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力于涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满......