zoukankan      html  css  js  c++  java
  • Java日志第17天 2020.7.22

    Java继承的三个特征

    1.Java语言是单继承的,一个类的直接有且仅有一个。

    若一个子类有多个父类,当父类有相同方法名时,子类无法正常调用。

    2.Java语言可以多级继承。

    public  class A{}

    public class B extends A{}

    public class C extends B{}

    如B继承A,C继承B,A也叫C的父类,只是间接继承。

    *java.lang.Object是最高父类

    3.一个子类只能有一个父类,但一个父类可以有多个子类。

    抽象

    如果父类当中方法不确定方法体的实现,那么该方法定义为抽象方法。

    抽象方法所在的类,定义为抽象类

    public abstract class A{ //A为抽象类

      public abstract void method();// 抽象方法

    }


    如何使用抽象类和抽象方法

    1.不能直接创建new抽象类对象

    2.必须有一个子类继承父类

    3.子类必须覆盖重写父类中所有抽象方法

    4.创建子类对象使用

     

    抽象类注意事项

    1.抽象类不能创建对象,如果创建,编译无法通过而报错。

    2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

    3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    4.抽象类的子类,必须重写先后抽象父类中所有抽象方法,否则,编译无法通过而报错,除非该子类也是抽象类。

     

     

    实例:群主发红包(继承方法的使用)

    定义User类,有姓名和金额等变量

    public class User {
        private String name;//姓名
        private int money;//钱包金额
    
        public User(){
        }
        public User(String name, int money) {
            this.name = name;
            this.money = money;
        }
        //显示用户信息
        public void display(){
            System.out.println("我是"+name+",余额"+money+"元");
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getMoney() {
            return money;
        }
        public void setMoney(int money) {
            this.money = money;
        }
    }

     

     定义群主Manager类,实现发红包功能

    import java.util.ArrayList;
    
    public class Manager extends User {
        public Manager(){
    
        }
    
        public Manager(String name,int money){
            super(name,money);
        }
    
        public ArrayList<Integer> send(int totalMoney, int count){
            //一个集合存储若干个红包的金额
            ArrayList<Integer> readList = new ArrayList();
    
            //检查群主余额
            int leftMoney = super.getMoney();
            if(totalMoney > leftMoney){
                System.out.println("余额不足");
                return readList;
            }
    
            super.setMoney(leftMoney - totalMoney);
    
            int avg = totalMoney / count;
            int mod = totalMoney % count;
    
            for (int i = 0; i < count-1; i++) {
                readList.add(avg);
            }
            int last = avg + mod;
            readList.add(last);
    
            return readList;
        }
    }

    定义成员Member类,实现收红包功能
    import java.util.ArrayList;
    import java.util.Random;
    
    public class Member extends User {
        public Member(){
    
        }
        public Member(String name,int money){
            super(name,money);
        }
    
        public void receive(ArrayList<Integer> list){
            int index = new Random().nextInt(list.size());
    
            int delta = list.remove(index);
            int money = super.getMoney();
    
            super.setMoney(money + delta);
        }
    }

    测试类

    import java.util.ArrayList;
    
    public class Test {
        public static void main(String[] args) {
            Manager manager = new Manager("群主",2000);
    
            Member member1 = new Member("member1",20);
            Member member2 = new Member("member2",60);
            Member member3 = new Member("member3",75);
    
            manager.display();
            member1.display();
            member2.display();
            member3.display();
            System.out.println("===================");
    
            System.out.println("发红包了!");
            ArrayList<Integer> readList = manager.send(1000,3);
            member1.receive(readList);
            member2.receive(readList);
            member3.receive(readList);
    
            manager.display();
            member1.display();
            member2.display();
            member3.display();
        }
    }
    结果如下

    明天学习接口咯!

  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/Gazikel/p/13359931.html
Copyright © 2011-2022 走看看