精华内容
下载资源
问答
  • 抽象类的子类不能再创建子类
    千次阅读
    2020-07-21 13:13:40

    抽象类为什么不能直接创建对象

        1、子类更具体,父类更抽象,直接创建父类对对象本身没有意义 。
        2、 如果创建的是父类对象在调用方法时,调用的父类中的方法而并非子类的方法,他违背了多态这种思想和设计。
        3、因为父类引用指向子类对象时,调用的方法是子类重写的方法,并不是说抽象类的构造方法没有意义,只是在创建子类对象时需要先调用父类的构造方法。

    更多相关内容
  • 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());
        }

    结果

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • /*** 抽象类继承* 用abstract修饰类就是抽象类* 用abstract修饰方法就是抽象方法(一般使用比较少)* 抽象类不能被实例化*/public classMain {public static voidmain(String[] args) {Animal an= newCat();...

    packagecom.company;/*** 抽象类继承

    * 用abstract修饰类就是抽象类

    * 用abstract修饰方法就是抽象方法(一般使用比较少)

    * 抽象类不能被实例化*/

    public classMain {public static voidmain(String[] args) {

    Animal an= newCat();

    an.cry();//输出 “猫叫,喵喵喵”

    an = newDog();

    an.cry();//输出 “狗叫,汪汪汪”

    Cat cat1= newCat();

    cat1.eat();//输出 “猫爱吃鱼”

    }

    }/*** 定义一个动物抽象类*/

    abstract classAnimal {private intage;privateString name;public intgetAge() {returnage;

    }public void setAge(intage) {this.age =age;

    }publicString getName() {returnname;

    }public voidsetName(String name) {this.name =name;

    }abstract public voidcry();

    }/*** 猫类(继承动物类)*/

    class Cat extendsAnimal {/*** 实现抽象父类中的具体方法*/@Overridepublic voidcry() {

    System.out.println("猫叫,喵喵喵");

    }/*** 子类自有方法*/

    public voideat() {

    System.out.println("猫爱吃鱼");

    }

    }/*** 狗类(继承动物类)*/

    class Dog extendsAnimal {/*** 实现抽象父类中的具体方法*/@Overridepublic voidcry() {

    System.out.println("狗叫,汪汪汪");

    }

    }

    抽象类:

    抽象类就是不能使用new方法进行实例化的类(不能被实例化,可以有多个抽象方法),即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract,在抽象类中的成员方法可以包括一般方法和抽象方法

    抽象类的关键字:abstract

    abstract 关键字,和哪些关键字不能共存?

    final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。

    private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。

    而抽象方法出现的就是需要被复写。

    static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了

    java中抽象类的特点:

    1. 如果一个类中有抽象方法,那么这个类一定是抽象类

    2. 抽象类中不一定有抽象方法

    3. 抽象类中可以存在抽象方法

    4. 抽象类中可以存在构造方法

    5. 抽象类中可以存在普通属性、方法、静态属性和静态方法

    6. 抽象类中的抽象方法需要有子类实现,如果子类不实现,则子类也需要定义为抽象的

    7,抽象方法和抽象类都必须被abstract关键字修饰。

    8,抽象类不可以用new创建对象。因为调用抽象方法没意义

    9:抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法

    接口和抽象类的区别之处:

    1. 接口中所有的方法隐含都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法

    2. 类可以实现很多个接口,但是只能继承一个抽象类

    3. 类可以不实现抽象类和接口声明的所有方法,在这种情况下,类也必须得声明成是抽象的

    4. 抽象类可以在不提供接口方法实现的情况下实现接口

    5. java接口中声明的变量默认都是final的,抽象类可以包含非final变量

    6. java接口中的成员函数默认都是public的,抽象类中的成员函数可以是private,protected或者是public的

    7. 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是如果它包含main方法的话是可以被调用的

    8:抽象类中可以有普通方法,接口中不能。

    9:抽象类可以有构造,接口不能

    10:抽象类中可以有普通字段,而接口中不行

    11:抽象类不能实现多继承,接口可以

    12:符合isa关系的选用抽象类,符合hasa关系的选用接口比抽象类抽象程度更高

    展开全文
  • 3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并是说抽象类的构造方法没有意义,那么在创建子类对象时需要先调用父类的构造方法。 4.抽象类不能直接实例化,并且对抽象...

    1.抽象类为甚麽不能直接创建对象?

    1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。
    2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计
    3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并不是说抽象类的构造方法没有意义,那么在创建子类对象时需要先调用父类的构造方法。
    4.抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)

    可以间接
    抽象类可以声明对象,但是不能使用自身的构造方法创建对象,但是可以使用子类的构造方法进行创建。
    public abstract class A{}
    public class B extends A{}
    A a = new B();

    展开全文
  • 2.抽象类虽然有构造器但是抽象类不能创建对象。 抽象方法没有方法体,创建对象不能执行,所以不能创建对象。 抽象类的注意事项 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。 ...
  • 抽象类能创建对象吗?

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

    千次阅读 2021-03-09 00:47:50
    一、抽象类的概念包含一个抽象方法的类就是抽象类,其本质...4.抽象类不能够实例化 ,即不能创建对象;5.抽象类的成员一般使用 public 或者 protected修饰;6.抽象类的抽象方法强制子类重写;7. 抽象类中所有的内容...
  • 计算机后端-Java-Java核心基础-第15章 面向对象07 10. 创建抽象类的匿名子类对象.avi
  • 抽象类通过子类被实例化

    千次阅读 2019-12-03 13:50:00
    抽象类其实是可以被实例化的,但是它的实例化方式并不是通过普通的new方式来创建对象,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,因为子类在实例化之前,一定会先实例化它的父类。这样创建了继承...
  • 在java中,当创建一个子类...提个问题:如果当创建一个子类对象会先创建父类对象的话,那么如果父类是抽象类的话,那该抽象父类也会被实例化喽,这与抽象类不能实例化相互矛盾啊! package javase5; pub...
  • 如何写抽象类的匿名子类

    千次阅读 2021-05-11 20:26:50
    创建匿名子类对象的时候重写抽象类中的方法 抽象类 package java; public class AbstractTest { public static void main(String[] args) { Student stu = new Student();//创建Student类的对象stu ...
  • Java抽象类不能创建对象

    万次阅读 2017-03-06 14:35:21
    抽象类和接口都能创建对象,只是后边的new不能是new他们自己,但可以new他们的实现类(必须是类,不能抽象类和接口), 人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些...
  • 疑问:因为知道抽象类不能初始化的,那么super(name)调用父类构造器,会初始化父类实例吗?如果初始化父类实例,那么也就是说调用构造器并一定初始化实例了,那这里的super(name)又有什么用处呢? 对这些...
  • 抽象类Shape及其子类

    千次阅读 2020-03-19 14:19:21
    定义抽象类Shape,圆形Circle、长方形Square、Rectangle为子类。 Shape类有一个数据成员(double型),定义带参构造方法、抽象方法calArea()(返回值类型:double)在Circle、Square两个类中,实现calArea()方法。在...
  • Java-抽象类

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

    2020-12-19 10:19:53
    在自然语言中,我们理解抽象...不能抽象类创建对象,它的意义在于被扩展 3.抽象类通常具有抽象方法,方法中没有大括号 PHP抽象类应用重点: 1.抽象方法不必实现具体的功能,由子类来完成 2.在子类实现抽象类的方法时
  • 复制代码 代码如下://抽象类的...不能抽象类创建对象,它的意义在于被扩展//3.抽象类通常具有抽象方法,方法中没有大括号//4.抽象方法不必实现具体的功能,由子类来完成//5.在子类实现抽象类的方法时,其子类的可见
  • 抽象类不能创建对象,其创建对象没有意义,但是抽象类可以保存一类事物具备的共同属性和行为,让子类进行继承。 抽象类的构造方法不是给自己用的,而是为了让子类调用构造方法创建对象时初始化用的 ...
  • Java------抽象类不能被实例化

    千次阅读 2020-05-13 00:54:23
    1、抽象类可以包括抽象方法,它反正不会去实例化,抽象类不能被实例化,也就是不能用new关键字去产生对象,抽象方法只需声明,而需实现,抽象类子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是...
  • //抽象类不能创建自己的实例,在试图创建抽象类对象时,会产生一个致使错误。 //在子类里实现抽象类的方法,并且可见性要等于、高于抽象方法的可见性,抽象类(public|protected|private),子类(public|public,...
  • 抽象类如何使用objective-c创建抽象类的示例。 您会注意到这不是其他语言中定义的真正抽象类。 例如,如果您真的愿意,您可以在基类上调用[[ alloc] init] 。 这旨在为抽象类型可以派上用场的情况提供抽象类的简单...
  • 2.不能抽象类创建对象,它的意义在于被扩展 3.抽象类通常具有抽象方法,方法中没有大括号 PHP抽象类应用重点: 1.抽象方法不必实现具体的功能,由子类来完成 2.在子类实现抽象类的方法时,其子类的可见性必须...
  • 含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象类中定义抽象方法必须放在具体子类中实现,所以...
  • 设置一个抽象父类,一个继承的子类 public abstract class Parent { protected abstract void log(); protected void use(){ log(); } @Test public void test(){ use(); } } public class Children ...
  • 主要介绍了java抽象类和接口定义与用法,结合实例形式详细分析了java抽象类和接口的基本概念、原理、定义、使用方法及操作注意事项,需要的朋友可以参考下
  • java抽象类的使用

    2021-03-06 21:27:41
    /*当多个类中出现相同...3,抽象类不可以用new创建对象。因为调用抽象方法没意义。4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子...
  • 主要介绍了Java抽象类和抽象方法定义与用法,结合实例形式详细分析了Java抽象类和抽象方法相关原理、定义、使用方法及操作注意事项,需要的朋友可以参考下
  • 如何在Java中找到给定的所有子类?如何在Java中尝试查找给定(或给定接口的所有实现者)的所有子类?截至目前,我有一种方法可以做到这一点,但我觉得效率很低(至少可以说)。方法是:获取路径上存在的所有类名的...
  • java快速入门学习 抽象类

    千次阅读 2021-02-28 13:11:33
    抽象类在定义类时,前面加上 abstract 关键字修饰的类叫抽象类。...抽象类是限制规定子类必须实现某些方法,但关注实现细节。那抽象类如何用代码实现呢,它的规则如下:用 abstract 修饰符定义抽象类。用 abstra...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 346,946
精华内容 138,778
关键字:

抽象类的子类不能再创建子类