首页 > 编程语言 >08 JAVA 继承多态抽象类接口

08 JAVA 继承多态抽象类接口

时间:2024-10-10 20:03:04浏览次数:6  
标签:return name int double 08 多态 JAVA balance public

1 函数题

1,super.a 来明确访问父类的字段。super(a); 表示调用父类的构造函数,并传递参数 a
2,
抽象类继承需要写新的构造器,重写抽象方法

class Circle extends shape{
    private double radius;
    public Circle(double radius){
        this.radius=radius;

    }
    //构造器比较容易忘
    //新的类型有新的变量所以要用构造器初始化
    @Override
    public  double getArea(){
        return Math.PI*radius*radius;
    }// 求面积

    public  double getPerimeter(){
        return 2*Math.PI*radius;
    } // 求周长
}

3,比较类对象


public boolean equals(Object o) {
    if (this == o) return true; // 同一对象
    if (o == null || getClass() != o.getClass()) return false; // 空或不同类
    Point point = (Point) o; // 类型转换
    return this.xPos == point.xPos && this.yPos == point.yPos; // 属性比较
	/*不能直接写this.id=id,这个不是传入的参数,不能直接调用,需要通过类*/
}

//而不是
   public boolean equals(int x,int y)
        {
            if((this.xPos==x)&&(this.yPos==y))
                return true;
            else
                return false;
        }
		
//另一个

public boolean equals(Object o) {
    if (this == o) return true; // 同一对象
    if (o == null || getClass() != o.getClass()) return false; // 空或不同类
    Student student = (Student) o; // 类型转换
    return this.id==student.id; // 属性比较
}

4,接口

class Octagon implements Comparable<Octagon>,Cloneable{
    private double side;
    public Octagon(double side) {
        this.side = side;
    }
    public double getSide() {
        return side;
    }
    public void setSide(double side) {
        this.side = side;
    }
    public double getPerimeter()
    {
        return side*8;
    }
    public double getArea()
    {
        return (2+4/Math.sqrt(2))*side*side;
    }
    @Override
    public int compareTo(Octagon o){
        if(this.side>o.getSide())
            return 1;
        else if(this.side<o.getSide())
            return -1;
        else
            return 0;
    }
    /*
    在 Java 中,Comparable<T> 是一个泛型接口,
    用于定义对象的自然顺序。这里的 <T> 表示一个类型参数,
    允许您指定将要比较的对象的类型。
    在 Comparable<Octagon> 中,<> 符号是用于指定泛型类型参数的
    意味着在调用 compareTo 方法时,
    参数必须是 Octagon 类型,确保类型安全。
     */
    @Override
    protected Object clone() {
        return this;
    }
}

5,类和子类

class Account{
    private  int id;
    private int balance;
    public Account() {
    }
    public Account(int id, int balance) {
        this.id = id;
        this.balance = balance;
    }
    public int getBalance() {
        return balance;
    }
    public void setBalance(int balance) {
        this.balance = balance;
    }
    public boolean withdraw(int money)
    {
        int tmp=balance-money;
        if(tmp>=0)
            setBalance(tmp);
        return tmp>=0;
    }
    public void deposit(int money)
    {
        balance+=money;
    }
    public String toString()
    {
        return "The balance of account "+id+" is "+balance;
    }
 }
 class CheckingAccount extends Account{
    private int overdraft;
    public CheckingAccount() {
    }
    public CheckingAccount(int id, int balance, int overdraft) {
        super(id, balance);
        this.overdraft = overdraft;
    }
         @Override
    public boolean withdraw(int money) {
       int tmp=getBalance()+overdraft-money;
       if(tmp>=0)
           setBalance(getBalance()-money);
       return tmp>=0;
    }
 }

6,因为传入参数的不确定,我们要手动调用有参和无参方法。

 public void pay(int hour)
    {
        pay();
    }
    public void pay()
    {
        System.out.println(40.0*rate);
    }

7,继承

class Media{
    String name;
    public double getDailyRent(){
        return 0.0;
    }
}
class Book extends Media{
    double price;
    public Book(String name,double price)
    {
        this.name=name;
        this.price=price;
    }
    //构造块
    public double getDailyRent(){
        return 0.01*price;
        //重写
    }
}
class DVD extends Media{
    public DVD(String name)
    {
        this.name=name;
    }
    public double getDailyRent(){
        return 1;
    }
}
class MediaShop{
    public static double calculateRent(Media[] medias, int days){
        double sum=0;
        //静态方法全局方法,数组长度没有括号
        for(int i=0;i<medias.length;i++)
        {
            sum+=medias[i].getDailyRent()*days;
        }
        return sum;
    }
}

8,子类的继承

image
image
image

//样例2不通过

class ComputerPlayer extends Player {
    String name;

    public ComputerPlayer(String name) {
//        this.name = name;这样写需要在父类定义无参构造器
        super(name);
    }
}

class PersonPlayer extends Player {
    String name;
    public PersonPlayer(String name) {
//        this.name = name;
        super(name);
    }

    int show() {
        Scanner sc = new Scanner(System.in);
        int show = sc.nextInt();
        return show;
    }
}

class Game {
    int A;
    int B;

    Game(Player A, Player B) {
        this.A = A.show();
        this.B = B.show();
    }

    public void start() {
        if (A == B) {
            System.out.println("A Draw.");
        } else if ((A == 1 && B == 2) || (A == 2 && B == 3) || (A == 3 || B == 1)) {
            System.out.println("Winner is personPlayer.");
        } else {
            System.out.println("Winner is computerPlayer.");
        }
    }
}

标签:return,name,int,double,08,多态,JAVA,balance,public
From: https://www.cnblogs.com/hoshino-/p/18457017

相关文章

  • [java毕业设计]免费分享一套SpringBoot+Vue电影推荐(电影网)系统【论文+源码+SQL脚本
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue电影推荐(电影网)系统,分享下哈。项目视频演示【免费】SpringBoot+Vue电影推荐(电影网)系统Java毕业设计_哔哩哔哩_bilibili项目介绍如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们......
  • 为什么现在Java面试难度越来越高了?
    前几天收到一位粉丝私信,说的是他才一年半经验,去面试却被各种问到分布式,高并发,多线程之间的问题。基础层面上的是可以答上来,但是面试官深问的话就不会了!被问得都怀疑现在Java招聘初级岗位到底招的是初级开发还是架构,是不是面进去就能直接进架构组了?(手动狗头)但其实有一说一,面......
  • Java日总结---多表查询&事务
    多表查询简介:设计员工和部门两个表点击查看代码#创建部门表CREATETABLEdept(didINTPRIMARYKEYAUTO_INCREMENT,dnameVARCHAR(20));#创建员工表CREATETABLEemp(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(10),genderCHAR(1),--性别salaryDOU......
  • JAVA面试八股文(三)
    MybatisMybatis的一级、二级缓存? 一级缓存存储的作用域是session,当sessionflush或者close之后,session中的缓存会失效,此时一级缓存就开启 二级缓存和一级缓存机制相同,hashmap存储,作用域为mapper,二级缓存一般不用,因为他不好控制缓存的刷新,我们一般是用的是redisMyBatis的......
  • [面试] java开发面经-1
    前言目录1.看到你的简历里说使用Redis缓存高频数据,说一下Redis的操作2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩3.你的项目中使用了ThreadLocal,那么当有两个请求同时发出时,会怎么处理,可以同时处理两个请求吗4.使用的是哪个版本的git5.假如在git提交的有两份代码,该怎......
  • 【视频笔记】408新增知识点信号——里昂视频
    文章目录**2.信号****3.信号的实现**4.信号的处理**①忽略信号****②执行信号的默认操作****③捕获井处理信号**几个Linux支持的典型信号:**5.信号的产生**①**通过终端按键(键盘)产生信号**例如,`Ctrl+C`发送2号信号SIGINT、`Ctrl+\`发送3号信号SIGQUIT②**程序异常时*......
  • java+vue计算机毕设高校教学评估系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的快速发展,高校教学质量的提升已成为社会各界关注的焦点。传统的教学评估方式往往依赖于纸质问卷和人工统计,不仅效率低下,而且难以全面......
  • java+vue计算机毕设高校开放式实验室管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及和深化,高校实验室作为教学和科研的重要基地,其管理和利用效率直接关系到人才培养的质量和科研成果的产出。然而,传统实验室管理模式......
  • java+vue计算机毕设房屋租赁管理平台【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,人口流动日益频繁,房屋租赁市场迎来了前所未有的发展机遇。然而,传统的房屋租赁方式存在信息不对称、管理效率低下、租赁双方权益......
  • Java Deeplearning4j:实现文本分类
    ......