首页 > 其他分享 >oop_promax_abstractAndInterface

oop_promax_abstractAndInterface

时间:2024-03-30 22:55:27浏览次数:25  
标签:get students void 接口 oop Student promax public abstractAndInterface

abstract

/*
!!!抽象类、抽象方法是什么样的?
    1.都是用abstract修饰的;抽象方法只有方法签名,不能写方法体。

!!!抽象类有哪些注意事项和特点?
    1.抽象类中可以不写抽象方法、但有抽象方法的类一定是抽象类。
    2.类有的成员(成员变量、方法、构造器)抽象类都具备。
    3.抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
    4.一个类继承抽象类,必须重写玩抽象的全部抽象方法,否则这个类也必须定义成抽象类。

!!!抽象类的场景和好处?
    1.父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,
    我们设计这样的抽象类,就是为了更好的支持多态。
    2.模板方法设计模式:
        解决方法中存在重复代码的问题:
        1.定义一个抽象类。
        2.在里面定义两个方法:
            1.一个是模板方法(加final关键字防止子类重写):把相同的代码放进去。
            2.一个是抽象方法:具体实现交给子类完成。

*/

interface

/*
接口:
    1.Java提供看一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口。
    public interface 接口名{
        //成员变量(常量)
        //成员方法(抽象方法)
    }
    2.注意:接口不能创建对象;接口是用来被类实现的,实现接口的类被成为实现类。
    修饰符 class 实现类 implements 接口1,接口2,接口3,...{
    }
    3.一个类可以实现多个接口(接口可以理解成干爹),实现类实现多个接口,必须重写完全部类的全部抽象方法,否则实现类
    必须定义成抽象方法。

!!!使用接口有啥好处?
    1.可以解决类单继承的问题,通过接口,我们可以让一个类有一个亲爹的同时,还可以找多个干爹去扩展自己的功能。

!!!为什么我们要通过接口已扩展自己的功能?
    1.因为通过接口去找干爹,别人通过你implements的接口,就可以显性的知道你是谁,从而也可以放心的把你当作谁
    来使用。

!!!使用接口的第二个好处?
    1.一个类我们说可以实现多个接口,同样,一个接口也可以被多个类实现的。这样做的好处是我们的程序就可以面向
    接口编程了,这样我们程序员就可以很方便的灵活切换各种业务实现。

!!!JDK8开始,接口中新增了哪些方法?
    1.默认方法:使用default修饰,使用实现类的对象调用。
    2.静态方法:static修饰,必须用当前接口名调用。
    3.私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用。
    4.它们都会默认被public修饰。
    public interface A{
       default void test1(){
            ...
       }

       private void test2(){
            ...
       }

       static void test3(){
            ...
       }
    }

!!!JDK8开始,接口中为啥要新增怎这些方法?
    1.增强了接口的能力,更便于项目的拓展和维护。

接口的多继承:
    1.一个接口可以同时继承多个接口。

接口多继承的作用:
    1.便于实现类去实现。

接口其他注意事项:
    1.一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承。
    2.一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现。
    3.一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的。(先后亲爸、后有干爹)
    4.一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
*/

interface_case

demand

/*
需求:
    请设计一个班级学生的信息管理模块:学生的数据有:姓名、性别、成绩
    功能 1:要求打印出全班学生的信息;功能 2:要求打印出全班学生的平均成绩

第 1 套方案:
    1.能打印出班级全部学生的信息;能打印班级全部学生的平均分。
第 2 套方案:
    1.能打印处班级全部学生的信息(包含男女人数);打印班级全部学生的平均分(要求是去掉最高分和最低分)。

需求:系统可以支持灵活的切换这些实现方案。
*/

print

package com.item.huang.interface_case;

import java.util.ArrayList;

public interface Print {
    //打印全部学生信息
    void printAllInformation(ArrayList<Student> students);
    //打印全部学生的平均分
    void printAverageScore(ArrayList<Student> students);
}

PrintLmol1

package com.item.huang.interface_case;

import java.util.ArrayList;

public class PrintImpl1 implements Print{

    @Override
    public void printAllInformation(ArrayList<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            System.out.println("姓名:" + students.get(i).getName());
            System.out.println("性别:" + students.get(i).getSex());
            System.out.println("成绩:" + students.get(i).getScore());
        }
    }

    @Override
    public void printAverageScore(ArrayList<Student> students) {
        double allScore = 0.0;
        for (int i = 0; i < students.size(); i++) {
            allScore += students.get(i).getScore();
        }
        System.out.println("平均成绩是:"+allScore/students.size());
    }
}

PrintLmol2

package com.item.huang.interface_case;

import java.util.ArrayList;

public class PrintImpl2 implements Print{
    @Override
    public void printAllInformation(ArrayList<Student> students) {
        int count1 = 0;
        int count2 = 0;
        for (int i = 0; i < students.size(); i++) {
            System.out.println("姓名:" + students.get(i).getName());
            System.out.println("性别:" + students.get(i).getSex());
            System.out.println("成绩:" + students.get(i).getScore());
            if (students.get(i).getSex()=='男'){
                count1++;
            }else{
                count2++;
            }
        }
        System.out.println("男生有:"+count1+"人"+" 女生有:"+count2+"人");
    }

    @Override
    public void printAverageScore(ArrayList<Student> students) {
        double allScore = 0.0;
        double max = students.get(0).getScore();
        double min = students.get(0).getScore();
        for (int i = 0; i < students.size(); i++) {
            allScore += students.get(i).getScore();
            if (students.get(i).getScore()>max){
                max = students.get(i).getScore();
            }
            if (students.get(i).getScore()<min){
                min = students.get(i).getScore();
            }
        }
        System.out.println("平均成绩是:"+(allScore-max-min)/(students.size()-2));
    }
}

Student

package com.item.huang.interface_case;

//学生类
public class Student {
    private String name;
    private char sex ;
    private double score;

    public Student() {
    }

    public Student(String name, char sex, double score) {
        this.name = name;
        this.sex = sex;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}

StudentOperator

package com.item.huang.interface_case;

import java.util.ArrayList;
//学生操作类-1.定义打印全部学生信息功能 2.定义打印全班学生平均成绩功能
//Print接口有两个实现类,PrintImpl1 和 PrintImpl2
//根据多态的思想可以改变指向的实现类而使用其不同的方法
public class StudentOperator {
    private ArrayList<Student> Students = new ArrayList<>();
    private Print print = new PrintImpl2();
    public StudentOperator(){
        Student s1 = new Student("张三",'男',100);
        Students.add(s1);
        Student s2 = new Student("李四",'男',90);
        Students.add(s2);
        Student s3 = new Student("李娟",'女',90);
        Students.add(s3);
        Student s4 = new Student("魏琳",'女',60);
        Students.add(s4);
    }

    public void printAllInformation(){
    print.printAllInformation(Students);
    }
    public void printAverageScore(){
    print.printAverageScore(Students);
    }

}

Test

package com.item.huang.interface_case;


public class Test {
    public static void main(String[] args) {
        StudentOperator studentOperator = new StudentOperator();
        studentOperator.printAllInformation();
        studentOperator.printAverageScore();
    }
}

标签:get,students,void,接口,oop,Student,promax,public,abstractAndInterface
From: https://www.cnblogs.com/qingandji/p/18106180

相关文章

  • oop_promax_mutipleAndFinal
    mutiple/*!!!什么是多态?1.多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。2.多态的具体代码实现:peoplep1=newStudent();p1.run();//编译看左边,运行看右边peoplep2=newTeacher();p2.run();3.多态的前提:......
  • hadoop-3.1.1分布式搭建与常用命令
    一、准备工作1.首先需要三台虚拟机:master、node1、node22.时间同步ntpdatentp.aliyun.com3.调整时区cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime 4.jdk1.8java-version5.修改主机名三台分别执行vim/etc/hostn......
  • 桌面/WEB端3D开发工具HOOPS SDK简介
    TechSoft3D在长达25年的时间内,一直通过卓越的3D技术帮助全球超过600家客户推动创新,这些客户包括HEXAGON、SolidWorks、SIEMENS、Aras、ANSYS、AVEVA等各个行业的领军者。TechSoft3D旗下拥有4款原生产品,分别是:HOOPSExchange、HOOPSCommunicator、HOOPSVisualize以及......
  • oop_promax_static
    static/*static:静态,可以修饰成员变量和方法。成员变量按照有无static修饰,分为两种:1.类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。访问:类名.类变量(位于堆内存)2.实例变量:(对象的变量):无static修饰,属于每个对象的。访问:对象.实例变量......
  • 【基于价值分解网络的多智能体协同学习】【VDN】 【Value-Decomposition Networks For
    目录Value-DecompositionNetworksForCooperativeMulti-AgentLearning基于价值分解网络(VDN)的多智能体协同学习Abstract 摘要1Introduction引言1.1OtherRelatedWork 1.1其他相关工作2Background 2背景2.1ReinforcementLearning2.1强化学习​2.2De......
  • 5.95 BCC工具之dcsnoop.py解读
    一,工具简介dcsnoop工具用于追踪目录项缓存(dcache)的查找,并可用于dcstat(8)之外的进一步调查。由于dcache查找可能很频繁,因此输出可能很冗长。默认情况下,仅显示查找失败的情况。二,代码示例#!/usr/bin/envpythonfrom__future__importprint_functionfrombccimport......
  • 面试题:为什么hadoop不适合存储小文件(1、从NN角度去 分析 2、DN角度分析 3、从MR角度分
    NN角度:小文件一旦很多,那么小文件的权限信息,文件大小信息,归属信息等信息就会跟着增加,每一个小文件都会产生这些信息,这些信息一旦多起来,那么NameNode的元数据就会变大,会导致元数据的大小超过小文件大小的总和,会增加NameNode的压力,有可能导致主节点崩溃,用户就无法通信了DN角度:小文件......
  • 6.Hadoop MapReduce
    6.1编辑WordCount.java创建wordcount测试目录 编辑WordCount.java输入下面代码:可以访问https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html查看importjava.io.IOException;importjava.util.String......
  • 5.Hadoop HDFS 命令
    5.1启动HadoopMuti-NodeClusterstart-all.sh5.2创建与查看HDFS目录创建user目录:hadoopfs-mkdir/user创建user下hduser子目录:hadoopfs-mkdir/user/hduser创建hduser下test子目录:hadoopfs-mkdir/user/hduser/test查看之前创建的HDFS目录: 一次查看HDFS所有子目......
  • oop对象使用过程中,调用了什么方法
    探索探索oop代码中,类对象定义、声明、初始化、赋值、引用等过程中,调用了什么函数。假设Test类有带参构造函数,拷贝构造函数,重载赋值运算符,析构函数等。1、Test类只有一个成员变量/*C++编译器对于对象构造的优化:用临时对象生成新对象的时候,临时对象就不产......