首页 > 编程语言 >Java基础——继承与多态

Java基础——继承与多态

时间:2024-07-07 17:30:38浏览次数:20  
标签:Java String 继承 多态 class int student public name

Java基础——继承与多态

方法重写

构造方法不能被重写

在这里插入图片描述

public class Fpet {
     String name;
  int health;
    int love;
     public void print(){
        System.out.println("宠物的自白:");
        System.out.println("我的名字是"+this.getName()+"健康度是"+this.getHealth()+"我的亲密度是"+this.getLove());
    }
public Fpet method1(){
    return Fpet;
} 
}
public class penguin extends Fpet {
    penguin(){}
    penguin(String nmae,int health,int love){
        super(nmae,health);
        this.love=love;
        this.sex="nv";
    }
    private String sex;
    public void print(){
        super.print();
        System.out.println("性别是"+this.sex);
        public penguin methodl(){
            return penguin;
        }//返回值类型是其子类也是方法的重写
    }


重写的方法修饰符范围不能小于父类lie
在这里插入图片描述

Object类是所有类的父类

在这里插入图片描述

public class student {
    String name;
    int code;
    int age;
   public student(){};
   public  student(String name,int code,int age){
       this.name=name;
       this.age=age;
       this.code=code;
   }

}
//我们认为当学号,姓名,和年纪相同时认为相同
public class TestStudent {


    public static void main(String[] args) {
        student stu1=new student("wang",1,18);
        student stu2=new student("wang",1,18);
       boolean a= stu1.equals(stu2);
       System.out.println(a);
    }
}

运行结果flase

没重写之前equal通过比较两个对象的内存地址来判断是否相等和==作用相同

在内存里两个对象开辟了不同的两个空间在内存中是不同的

显然object自带的equal方法无法满足我们的需求

对equal方法进行重写

public class student {
    String name;
    int code;
    int age;
   public student(){};
   public  student(String name,int code,int age){
       this.name=name;
       this.age=age;
       this.code=code;
   }
   //对父类Object的equal函数进行重写
    public boolean equals(Object o) {
        boolean flang = false;
        if (this == o) {
            flang = true;
        }
        if (!(o instanceof student)) {
            flang = false;
        } else {
            student stu=(student) o;//将强制转换为student类型
            if (this.name==this.name && this.age==stu.age&&this.code==stu.code){
                flang=true;
            }
        }
        return flang;
    }
}

//我们认为当学号,姓名,和年纪相同时认为相同
public class TestStudent {
    public static void main(String[] args) {
        student stu1=new student("wang",1,18);
        student stu2=new student("wang",1,18);
        boolean a=stu1.equals(stu2);
        System.out.println(a);

    }
}
运行结果ture

多态

代码需求改变时,需要频繁修改代码时使用多态

多态:同一引用类型,Pet

使用不同的实例 Dog 对象 penguin对象

而执行不同的操作 Dog的toHospital(), penguin的toHospital(JVM的动态绑定机制)

在这里插入图片描述

用父类类型声明一个变量,引用的是子类的的 对象

Pet pet =new Dog();

在这里插入图片描述

重写toHospital方法

抽象方法

1.普通方法

修饰符 返回值 方法名(参数列表){

方法体;

}

2.抽象方法(约束行为在抽象类中不具体实现)

修饰符 abstract 返回值 方法名(参数列表);

拥有抽象方法的类必须声明成抽象类(abstract)

但是抽象类中不一定要有抽象方法

抽象方法在子类中一定要实现,除非子类是抽象类继承抽方法

抽象类不能创建对象(抽象类不允许实例化)

在这里插入图片描述

向上转型

Pet pet=new Dog();

可以调用父类的方法,不能调用之类特有的对象

向下转型

在这里插入图片描述

Penguin penguin=(Penguin)pet;

实际运行时,会出现转换异常 ClassCastException

怎么办?

使用nstanceof:判断变量类型是否相等

在这里插入图片描述

多态的应用

1.使用父类作为方法的形式参数

2.使用父类作为方法的返回值类型

public abstract class Animal {
    public abstract void cry();
    }
class dog extends Animal {
    public void cry() {
        System.out.println("汪汪汪");
    }
}

class cat extends Animal {
    public void cry() {
        System.out.println("喵喵喵");
    }
}
class dunck extends Animal {
    public void cry() {
        System.out.println("嘎嘎嘎");
    }
    public  class Master{
public Animal domateAnmal(String a) {

    if (a.equals("dog")) {
        Animal dog1 = new dog();
        return dog1;
    } else if (a.equals("dunck")) {
        Animal dunck1 = new dunck();
        return dunck1;
    }

    else {
        Animal cat1=new cat();
        return cat1;
    }

}
}
public class TestAnimal {

    public static void main(String[] args) {
        String a="dog";
        Master m1=new Master();
      Animal animal=  m1.domateAnmal(a);
      animal.cry();
    }

}

遇到的问题

1.堆区与栈区的区别

堆区和栈区上本质上都是内存,只是生命周期不同而已

栈区:当函数变量的为局部变量函数运行完后释放内存,先分配内存的后释放顺序和栈相同

特点:大小固定容量有限

堆区:当函数的变量生命周期超过了本函数,内存的释放由程序员决定

2.==比较两个对象的内存地址是否相同

3.instanceof:判断变量类型是否相等

4.equals比较字符串的内容时,String类对equals方法进行重写,使其比较的是字符串的内容

5.带返回值的函数加入条件判断后,无论什么结果最后都要返回一个相应的值

栈区的区别

堆区和栈区上本质上都是内存,只是生命周期不同而已

栈区:当函数变量的为局部变量函数运行完后释放内存,先分配内存的后释放顺序和栈相同

特点:大小固定容量有限

堆区:当函数的变量生命周期超过了本函数,内存的释放由程序员决定

2.==比较两个对象的内存地址是否相同

3.instanceof:判断变量类型是否相等

4.equals比较字符串的内容时,String类对equals方法进行重写,使其比较的是字符串的内容

5.带返回值的函数加入条件判断后,无论什么结果最后都要返回一个相应的值

6.异常 ClassCastException 类型转换异常

标签:Java,String,继承,多态,class,int,student,public,name
From: https://blog.csdn.net/whc15059539669/article/details/140232880

相关文章

  • Java--阶段练习(汽车租赁)
    阶段练习面向对象的设计过程1.分析需求2.找名词(类,属性)父类:汽车:品牌,车牌,日租金子类:轿车:型号客车:座位数汽车业务类汽车租赁管理类3.动词(方法)汽车类(计算租金)汽车业务类(初始化车信息,提供租赁服务)汽车租赁管理类(入口和系统界面)4.优化设计父子类的关系:汽车类—>......
  • SpringBoot-校园疫情防控系统-93033(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    springboot校园疫情防控系统摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校园疫情防控等问题,对校园疫情防控进行研究分析,然后开发设计出......
  • Java虚拟机(JVM):深入理解与性能调优
    引言Java虚拟机(JVM)是Java平台的核心组件,它使得Java程序具有跨平台运行的能力。JVM不仅负责执行Java字节码,还管理着内存分配、垃圾回收等关键任务。深入理解JVM的工作原理对于进行有效的性能调优至关重要。本文将详细介绍JVM的工作原理,包括内存模型、垃圾回收机制,并分享一些实......
  • 基于Django+微信小程序的旅游资源信息管理系统(免费领源码+数据库)可做计算机毕业设计JA
    django广西-东盟旅游资源信息管理系统小程序摘 要在社会快速发展和人们生活水平提高的影响下,旅游产业蓬勃发展,旅游形式也变得多样化,使旅游资源信息的管理变得比过去更加困难。依照这一现实为基础,设计一个快捷而又方便的基于小程序的旅游资源信息管理系统是一项十分重要并且......
  • java 如何暴露header给前端
    在Java中,将HTTP响应的Header暴露给前端通常涉及在Web应用程序的服务器端代码中设置这些Header。这可以通过不同的JavaWeb框架来实现,比如SpringMVC、JAX-RS(Jersey)、Servlet等。这里,我将提供一个使用SpringMVC框架的示例,因为它在JavaWeb开发中非常流行且易于理解。1.示例:使用S......
  • Java编程:解决实际问题的高效方法
    ......
  • 【C++深度探索】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数)
    ✨                            愿随夫子天坛上,闲与仙人扫落花    ......
  • Java入门基础-数组
    Java入门基础-04数组本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记Java入门基础课程视频地址上一章:Java入门基础-03程序流程控制目录Java入门基础-04数组@[TOC](目录)一、认识数组二、数组的定义和访问1.静态初始化数组数组的访问数组......
  • Java面试八股之MYISAM和INNODB有哪些不同
    MYISAM和INNODB有哪些不同MyISAM和InnoDB是MySQL数据库中两种不同的存储引擎,它们在设计哲学、功能特性和性能表现上存在显著差异。以下是一些关键的不同点:事务支持:MyISAM不支持事务,没有回滚或崩溃恢复的能力。InnoDB是事务安全型的,支持事务处理、回滚、行级锁定和外键约......
  • C++中的继承与多态 历史最详细版本(1)
    1 继承的概念和定义1.1继承的概念    继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程......