精华内容
下载资源
问答
  • 抽象类的子类不能仍是抽象类
    万次阅读 多人点赞
    2018-10-31 21:39:05

    继承了抽象类的子类需要把抽象类中的方法重写一遍吗?
    抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写;
    接口和抽象类中只有方法名,没有定义的,如果你不定义 也就是空方法,接口就是为了弥补java不能多重继承,接口针对的是对象而不是实现。实现的部分可以交由对象去实现。这就是java中的多态啊。

    更多相关内容
  • 9.2 抽象类定义、子类抽象类

    千次阅读 2020-08-12 09:24:09
    1. 不能直接创建new抽象类对象。必须用一个子类来继承抽象父类 2. 抽象类中可以有抽象方法和成员方法、构造方法,抽象方法没有方法体 3. 子类必须覆盖重写抽象父类当中所有的抽象方法。(当子类抽象类时,抽象.

    想了解更多请查看java学习(idea版)

    目录

    抽象类定义

    列:抽象类练习

    列:当子类是抽象类时

    列:发红包案例


    抽象类定义

    1.  没有方法主体的方法称为抽象方法
    2. Java语法规定,包含抽象方法的类一定是抽象类,在class之前写上abstract即可

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

    • 1. 不能直接创建new抽象类对象。必须用一个子类来继承抽象父类
    • 2. 抽象类中可以有抽象方法和成员方法、构造方法,抽象方法没有方法体
    • 3. 子类必须覆盖重写抽象父类当中所有的抽象方法。(当子类是抽象类时,抽象的父类可以选择性覆盖重写抽象方法)
    • 4 . 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
    一个抽象类不一定含有抽象方法,只要保证抽象方法所在的类是抽象类即可。
    

    列:抽象类练习

     

    列:当子类是抽象类时

    public abstract class Animal {
        public abstract  void  eat();
    }
    
    public abstract class Dog extends Animal {
        @Override
        public void eat() {
            System.out.println("狗都喜欢吃屎");
        }
    }
    public class MyDog extends Dog {
        @Override
        public void eat() {
            super.eat();
            System.out.println("我的狗不喜欢吃屎");
        }
    }
    

    列:发红包案例

    抽象父类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 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;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", money=" + money +
                    '}';
        }
    }

    群组类继承User类 ,群主发红包

    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> list=new ArrayList<>();
    
            int leftMoney=super.getMoney();//获取群组当前金额
            if (totalMoney>leftMoney){
                System.out.println("余额不足,发不了红包");
                return list;
            }
                super.setMoney(leftMoney-totalMoney);//群组发红包后剩余金额
            int avg=totalMoney/count;//每份金额钱数
            int mod=totalMoney%count;//均分后余额
    
            for (int i = 0; i < count-1; i++) {
            list.add(avg);
            }
            list.add(avg+mod);//最后一份红包金额
            return  list;
        }
    
    }

    群成员类继承User类,成员类接受红包

    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);//用户新金额
        }
    
    }

    测试

        public static void main(String[] args) {
            Manager manager=new Manager("群主",100);//创建群主
            Member a=new Member("用户a",20);//创建用户a
            Member b=new Member("用户b",20);//创建用户b
            Member c=new Member("用户c",20);//创建用户c
    
            //群主发20元钱红包,分成3个
            ArrayList<Integer> list=manager.send(20,3);
    
            a.receive(list);
            b.receive(list);
            c.receive(list);
            System.out.println(manager.toString());
            System.out.println(a.toString());
            System.out.println(b.toString());
            System.out.println(c.toString());
        }

    结果

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Java抽象类子类方法的调用顺序

    千次阅读 2021-04-24 01:49:24
    2) 抽象类中的方法调用子类实现的抽象方法3) 抽象类可以在子类未实例化时调用子类实现的抽象方法;4) 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未实例化...

    结论:

    1) 实例化子类时必须先实例化父类;

    2) 抽象类中的方法调用子类实现的抽象方法

    3) 抽象类可以在子类未实例化时调用子类实现的抽象方法;

    4) 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。

    代码如下:

    package com.example;

    public class Test {

    public static void main(String[] args) {

    new Child();

    //结果:初始化父类---->child eat---->child jump---->初始化子类

    }

    }package com.example;

    /**

    * Created on 2017/5/5.

    * Author:crs

    * Description:XXX

    */

    public class Child extends Parent {

    public Child() {

    System.out.println("实例化子类");

    }

    @Override

    void eat() {

    System.out.println("child eat");

    }

    @Override

    void jump() {

    System.out.println("child jump");

    }

    }

    package com.example;

    /**

    * Created on 2017/5/5.

    * Author:crs

    * Description:XXX

    */

    public class Child extends Parent {

    public Child() {

    System.out.println("实例化子类");

    }

    @Override

    void eat() {

    System.out.println("child eat");

    }

    @Override

    void jump() {

    System.out.println("child jump");

    }

    }

    展开全文
  • JAVA——抽象类

    千次阅读 2021-03-09 00:47:50
    一、抽象类的概念包含一个抽象方法的类就是抽象类,其本质...4.抽象类不能够实例化 ,即不创建对象;5.抽象类的成员一般使用 public 或者 protected修饰;6.抽象类的抽象方法强制子类重写;7. 抽象类中所有的内容...

    一、抽象类的概念

    包含一个抽象方法的类就是抽象类,其本质是对多个普通类中相同的部分的抽象。

    二、抽象类的特点

    1.抽象方法和抽象类使用 abstract 修饰;

    2.有一个抽象方法的类必须是抽象类;

    3.抽象类中一定有抽象方法,反之不成立;

    4.抽象类不能够实例化 ,即不能创建对象;

    5.抽象类的成员一般使用 public 或者 protected修饰;

    6.抽象类的抽象方法强制子类重写;

    7. 抽象类中所有的内容均是用来给子类使用;

    三、抽象类与普通类的区别

    抽象类和普通类在结构上的区别:抽象类有抽象方法,而普通类没有。

    四、抽象类的子类的特点

    1 如果子类想要继承抽象类,就必须实现抽象类中所有的抽象方法;

    2 如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类。

    五、代码演示

    例:编写一个交通工具类,具有前进run()功能,其子类有自行车、小轿车、地铁,重写父类方法。

    主人有属性name,age属性,方法回家goHome(交通工具),需要使用交通工具,使用抽象类优化程序。

    public static void main(String[] args) {

    Hoster hoster = new Hoster("张三", 30);

    Vehicle v = new Bike(); //使用多态创建对象

    hoster.goHome(v); //调用goHome()方法

    //创建匿名对象new Car(),并将其作为goHome()方法的形式参数

    hoster.goHome(new Car());

    //创建匿名对象new Hoster("李四", 31)并赋值,再调用goHome()方法

    new Hoster("李四", 31).goHome(new Subway());

    }

    class Hoster {

    private String name;

    private int age;

    public Hoster() {

    super();

    }

    public Hoster(String name, int age) {

    super();

    this.age = age;

    }

    public void goHome(Vehicle v) {

    v.run(this); //将参数传递给此处goHome方法,再调用this所指向对象 // (谁调用的goHome就指向谁)的run()方法。

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    }

    abstract class Vehicle { //abstract修饰的抽象类

    public abstract void run(); //abstract修饰的抽象方法

    public abstract void run(Hoster hoster); //abstract修饰的抽象方法

    }

    class Bike extends Vehicle {

    @Override //run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("自行车在跑");

    }

    @Override//run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "骑着自行车回家"); //执行

    }

    }

    class Car extends Vehicle {

    @Override//run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("小轿车在跑");

    }

    @Override//run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "开着小轿车回家");//执行

    }

    }

    class Subway extends Vehicle {

    @Override //run()方法重写

    public void run() {//实现父类中的抽象方法

    System.out.println("地铁在跑");

    }

    @Override // run(Hoster hoster)方法重写

    public void run(Hoster hoster) {//实现父类中的抽象方法

    System.out.println(hoster.getName() + "坐着地铁回家");//执行

    }

    }

    展开全文
  • Java抽象类 详解 一、抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面...
  • 抽象类概述分析事物时, 发现了共性的内容,就出现向上抽取,但是如果父类 的方法功能与子类不同,那么这时就抽取方法主体,这样抽取出来的方法 就是抽象方法 什么是抽象类有抽象方法的类 抽象类和普通的父类有什么区别...
  • 抽象类为什么不能创建对象?

    千次阅读 2020-07-10 17:24:06
    在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。 抽象类完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当...
  • java中抽象类子类可以定义为抽象类吗?比如我可以在在抽象子类中再扩展抽象方法
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { ...
  • 先继承抽象类在实现接口 class C extends B implements A interface A{ public abstract void say(); } abstract class B{ public abstract void fun(); } class C extends B implements A{ public void say() ...
  • 抽象类能创建对象吗?

    千次阅读 2020-07-15 00:27:20
    抽象类不能创建对象的原因: 1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。 2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计 3.因为...
  • Java抽象类为什么不能被实例化?

    千次阅读 2020-07-08 22:25:23
    抽象类是Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和抽象方法,该类不能够进行实例化(这个在后面进行解释)因为抽象类不能直接实例化,所以必须需要有实现子类。 问题二:为什么...
  • 抽象类通过子类被实例化

    千次阅读 2019-12-03 13:50:00
    抽象类其实是可以被实例化的,但是它的实例化方式并不是通过普通的new方式来创建对象,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,因为子类在实例化之前,一定会先实例化它的父类。这样创建了继承...
  • 抽象类为什么不能直接创建对象

    千次阅读 2020-07-21 13:13:40
    抽象类为什么不能直接创建对象 1、子类更具体,父类更抽象,直接创建父类对对象本身没有意义 。 2、 如果创建的是父类对象在调用方法时,调用的父类中的方法而并非子类的方法,他违背了多态这种思想和设计。 3、...
  •       接口是我们常用的,抽象类好像并不是怎么常用,但这并不代表他不重要,他可以被继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有...抽象类不能够被实例化,也就是说
  • Java中的抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java中的抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • 父类为抽象类子类继承父类时,父类有的成员变量,方法,子类都有,但是,子类要重写父类里面的抽象方法。 //父类 public abstract class AbstractLogger { public static int INFO = 1; public static int DEBUG...
  • java抽象类 继承

    千次阅读 2021-03-08 06:02:32
    关于java抽象类 继承的搜索结果回答抽象类和接口的区别:默认的方法实现抽象类可以有默认的方法实现完全是抽象的。...所以就不能抽象类那么无赖了,接口就根本不能存在方法的实现。实现 抽象类使用ex...
  • Java抽象方法和抽象类

    千次阅读 2022-04-22 15:41:00
    如果父类的方法本身需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法 public abstract void run(); } 把一个方法...
  • 你知道java当中的普通类和抽象类之间有什么区别吗?...1、和普通类比较起来,抽象类可以被实例化,这个区别还是非常明显的。2、除了以上的一点之外,抽象类它能够有构造函数,被继承的时候,子类就一...
  • Java-抽象类

    千次阅读 2021-02-26 09:29:41
    抽象类含有抽象方法的类就是抽象类1) 抽象...3) 抽象类需要靠子类来重写抽象方法,以实现其功能public classTest1 {//抽象类:含有抽象方法的类//抽象方法:没有方法体的方法public static voidmain(String[] args) ...
  • 抽象类实现某个接口

    千次阅读 2021-11-26 10:15:36
    /** * created by wlx on 2021/11/26 ...抽象类没有实现接口的方法 public abstract class Test implements Itest{ } 子类需实现接口的全部方法,否则报错 public class Testapp extends Test{ @Overri...
  • 在java中,当创建一个子类...提个问题:如果当创建一个子类对象会先创建父类对象的话,那么如果父类是抽象类的话,那该抽象父类也会被实例化喽,这与抽象类不能实例化相互矛盾啊! package javase5; pub...
  • java抽象类可以被继承吗?

    千次阅读 2021-03-06 06:39:35
    Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。...由于抽象类不能实例化对象,所...
  • 抽象类不能继承接口

    千次阅读 2017-09-21 10:21:43
    1. 抽象类可以继承普通类,但可以继承接口。 (public abstract class 抽象类 extends 普通类 { }) 2. 接口可以继承多接口,但可以继承抽象类。 (public abstract class 接口1 extends 接口2,接口3 ,接口4{ }...
  • 什么是抽象类?怎么定义?

    千次阅读 2021-09-01 09:47:26
    什么是抽象类?怎么定义?这是属于java技术里面的一个知识点,本期教程就是围绕这个问题做的相关介绍,当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,在...
  • 你知道java当中抽象类的作用是什么吗?有什么作用?下面和小编一起来详细的了解一下具体的作用,以及看看抽象类作用的例子吧!一、java抽象类的作用java抽象类的作用具体的可以分成以下的三点:1、抽象类通常都是用来...
  • java抽象类经典实例分享

    千次阅读 2021-02-12 11:07:34
    在这之前有给大家详细的介绍过java抽象类,相信很多人应该都比较了解了,那么下面就要继续来给大家分享一个java抽象类的实例。题目:不同几何图形的面积计算公式是一样的,可是,它们具有的特性是一样的,都具有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 488,483
精华内容 195,393
关键字:

抽象类的子类不能仍是抽象类