精华内容
下载资源
问答
  • 抽象类的构造器有什么作用
    千次阅读
    2016-04-28 15:25:03

    因为抽象类不可实例化,那么只能在子类实例化时调用该抽象类的构造器才有用

    看实例代码:

    abstract class Animal {
    	Animal(){
    		System.out.println("抽象类Animal无参构造器"); //此处执行前会默认执行super()
    	}
    	
    	Animal(int a){
    		System.out.println("抽象类Animal有参构造器");
    	}
    }
    public class Horse extends Animal {
    	Horse () {
    		System.out.println("子类horse无参构造器"); //此处执行前会默认执行super()
    	}
    	
    	Horse (int h) {
    		super(3);
    		System.out.println("子类horse有参构造器");
    	}
    	
    	public static void main(String [] args) {
    		Horse h = new Horse();
    		System.out.println("---------------------");
    		Animal h2 = new Horse(6);
    //		Animal h3 = new Animal(); //无法编译,抽象类不可实例化
    	}
    }
    

    运行结果如下:

    抽象类Animal无参构造器
    子类horse无参构造器
    ---------------------
    抽象类Animal有参构造器
    子类horse有参构造器


    更多相关内容
  • java抽象类构造方法和普通类的构造方法一样都是用来初始化类只是抽象类构造方法不能直接调用 因为抽象类不能实现实例但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类构造函数也可以使用其...

    java抽象类的构造方法和普通类的构造方法一样

    都是用来初始化类

    只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例

    但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数

    也可以使用其方法

    可以这么理解吧 抽象类就是一个不能实例化的不同类

    不过如果方法加了abstract那么就必须在子类里面重写了

    (1)Java中抽象类和接口中有构造方法吗?

    ①在接口中 不可以有构造方法

    在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。

    A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需修改。接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,

    B. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序

    C. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。

    ②在抽象类中 可以有构造方法。

    在抽象类中可以有构造方法,只是不能直接创建抽象类的实例对象,但实例化子类的时候,就会初始化父类,不管父类是不是抽象类都会调用父类的构造方法,初始化一个类,先初始化父类。(2)补充:构造方法、抽象类、接口的定义:

    ①构造函数(构造器、构造函数):构造函数是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

    A.方法名与类名相同;

    B.没有返回类型(例如return、void等);

    C.不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

    D.父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。

    E.构造方法可以重载,以参数的个数,类型,顺序,分为空参构造方法和有参构造方法。

    ②抽象类:使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。

    注:

    抽象类中不一定有抽象方法,抽象方法一定存在于抽象类中。

    继承抽象类的可以是普通类,但必须重写抽象类中的所有抽象方法,也可以是抽象类,无需重写抽象类中的所有抽象方法。③接口:接口是一种规范,是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    注:

    可以说是一种特殊的抽象类,里面的方法全是抽象方法。

    子类实现接口必须对接口中的方法全部重写。接口和抽象类的语法区别:

    1)接口不能有构造方法,抽象类可以有。

    2)接口不能有方法体,抽象类可以有。

    3)接口不能有静态方法,抽象类可以有。

    4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。

    展开全文
  • java 抽象类构造函数的作用

    千次阅读 2020-04-17 12:33:42
    毋庸置疑抽象类中可以定义构造函数,但是这时会一个疑问,既然抽象类的实例化毫无意义那为何又要定义其自己的构造函数呢? 首先,可以通过其内部的构造函数初始化其内部的变量。 其次,可以通过实现它的子类通过...

    #抽象类

    何为抽象类?
    答:abstract修饰的类为抽象类。
    何为抽象成员函数
    答:abstract修饰的类为抽象成员函数。
    抽象类与抽象成员函数有何联系?
    答:有抽象函数的类必须被生命为抽象类,但是抽象函数中也可以有非抽象函数、也可以有构造函数。
    1.abstract修饰class声明一个抽象类。
    2.abstract修饰一个成员函数表示该成员函数为抽象成员函数该函数没有函数体只能以;结束;
    3.抽象类不能创建实例,即不能用new创建对象,哪怕抽象类中没有抽象方法;
    4.抽象类中可以有

    #接口(完全抽象类)

    1.变量都是public statIc final 常量;
    2.方法都是抽象方法;且都是默认public abstract
    3.实现接口时重写方法都要声明public。

    毋庸置疑抽象类中可以定义构造函数,但是这时会有一个疑问,既然抽象类的实例化毫无意义那为何又要定义其自己的构造函数呢?
    首先,可以通过其内部的构造函数初始化其内部的变量。
    其次,可以通过实现它的子类通过super()调用其内部构造函数。实质上就是调用父类构造函数初始化自己的成员变量。
    在此附上两张图大家更好地理解一下。
    通过调用父类构造函数实现对子类成员变量的初始化

    #java抽象类接口的一些例题

    1.以下方法错误的是(A D)
    A 覆盖方法包括成员方法的覆盖和成员变量的覆盖
    B 成员方法的覆盖是多态的一种表现形式
    C 子类可以调用父类中被覆盖的方法
    D 任何方法都可以被覆盖
    分析:在子类中调用父类方法使用super关键字。super.a() 就可以调用父类的a方法。 
    在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。
    如果子类本身没有定义使用this关键字可以去访问父类的成员变量。
    最后final修饰的方法不能被覆盖 覆盖即重写和重载一起都是多态的表现形式。

    2.下面说法正确的是(C H)
    A instanceof 关键字用来判定某个类是否为抽象类。
    B final关键字修饰的成员变量不需要初始化。
    C 接口的方法都是抽象方法(jdk1.8之前),并且没有方法体
    D 当我们继承一个抽象类时,我们必须要实现抽象类的抽象方法。
    E 在向上转型的过程中,如果父类和子类拥有相同的名字的成员方法(非静态)
    访问的是子类的该方法。如果父类和子类拥有名字的成员变量时,访问的是子类的成员变量。
    F 内部类访问为外部类方法时,不用创建外部类对象直接访问外部类方法。
    G 内部类变量不能设置为static,也不能设置为final
    H 多态通常用来作为参数传入或者作为返回值返回。

    3.下面说法不正确得是(A C D E)
    A 不能和abstract一起使用的修饰符有static final public final
    B 抽象类之间是继承关系,接口之间也是。
    C 接口不能存在普通方法和常量
    D局部内部类public,private修饰符修饰
    E接口不可以直接实例化,抽象类可以

    4.下面有那些选项是对的(B C E)
    A instanceof是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例,返回的是布尔类型
    B private protected 和static都不可以修饰interface接口
    C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
    D对象是对类的抽象化
    E 接口中可以有常量
    分析 接口可以有常量(jdk1.8以后) instanceof 是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例 或者是右边超类的实例

    5.以下说法正确的是 ( B )
    对于方法内得形参()
    A 必须定义多个形参
    B 可以没有
    C 至少有一个
    D 只能是简单变量

    6.以下说法正确的是( C )
    A 对于局部内部类,不能在class前加任何修饰符(public default private protected)来修饰B 只要没有定义不带参数的构造函数,JVM都会为类生成一个默认的构造函数
    C 向上转型中,父类与子类拥有相同名字的普通方法时,访问的是子类的成员方法
    D单例模式中类的构造方法使用private修饰,声明为私有,这样就不能在类的外部使用new关键字来创建实例对象了

    7.final修饰的方法不可重写的(子类不能重写父类final方法,但是可以调用)

    8.以下说法正确的是(E G)
    A 抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造对象
    B 接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰符修饰
    C 类是对象的抽象模型,刻画了对象中所有信息
    D 抽象方法不能用final来修饰 ,可以用satic来修饰
    E 对计算公式已不需要更改的书数学哈书,常用public static final 来修饰;
    F 若类中有final abstract来修饰 的 方法 ,必须实现该方法才能构造对象。
    G 引用是对象的名字,引用值是对象的起始地址

    9.下列的说法错误的是(B)
    A 抽象类必须被子类继承
    B 对象向上转型以后,拥有相同名字的普通成员变量(静态变量)时,访问的是子类里面的
    C super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法的第一行
    D 接口的方法必须定义为public权限,并且只能是抽象方法(不考虑jdk1.8)

    10.下面那些选项是错误的(A B D E)
    A instanceof 是一个二元操作符,只用来判断左边的对象是否是右边的类的实例,返回是布尔型
    B 成员内部类可以使用任何修饰符修饰,可以定义常量和静态变量
    C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
    D 在成员方法里面叫做局部内部类,可以访问外部类属性和使用任何修饰符,但使用局部内部类方法时 ,必须实例化内部类对象
    E 实现内部类的调用,要直接实例化内部类

    11 下列定义,正确的有哪些( A B C)
    A接口只能做方法申明,抽象类中就可以做方法实现和方法申明
    B 抽象类中的抽象方法只能申明,不能实现.abstract void abc();不能加{}
    C 抽象方法要被实现,所以不能是静态的,也不能是私有的
    D 接口里只能有公共方法,1.8以后 可以有普通方法和成员变量
    E 类实现接口,利用关键字implement 完成 (错误 注意为implements)

    12以下说法不正确的有(A B C D)
    A拥有抽象方法的类为抽象类
    B抽象类的方法时抽象方法
    C继承抽象类的子类为抽象类
    D实现接口的类为抽象类

    13 下列说法正确的是 ( A )
    A Java程序中的main方法必须写在类里面
    B Java程序中可以有多个main方法
    C Java程序中类名必须和文件名一样
    DJava程序的main方法中如果只有一条语句,可以不用大括号括起来
    E在类中声明一个整数数组作为成员变量,如果没有给他赋值,数值元素值为空
    F数组本身是一个对象

    14 如果在子类继承父类,子类构造方法中没有注明时默认第一行调用父类的空参构造方法

    15 下列说法正确的是(A B C)
    A try块不可以省略
    B 可以使用多重catch块
    C finally块可以省略
    D catch块和finally块可以同时省略

    16 以下对自定义异常描述正确得是(A C)
    A 自定义异常必须继承Exception
    B 自定义异常必须继承Error
    C 自定义异常可以更加明确地确定异常出错位置和详细详细
    D程序中已经提供了丰富的异常类,使用自定义异常没有意义

    17在JAVA中关于抽象类的描述正确的说(D)
    A 抽象类可以被实例化
    B 如果一个类中有一个方法被声明为抽象的这个类必须是抽象类
    C 抽象类的方法必须是抽象的
    D 声明抽象类必须带有abstract关键字

    #抽象类 接口 内部类 final 覆盖 重写 多态 相关例题

    在JAVA中关于抽象类的描述正确的是 C

    A、抽象类可以被实例化
    B、如果一个类中有一个方法被声明为抽象的这个类必须是抽象类
    C、声明抽象类必须带有abstract关键字
    D、抽象类的方法必须是抽象的
    2.
    以下说法不正确的有 ABCD

    A、拥有抽象方法的类为抽象类 // 没有抽象方法的类也为抽象类
    B、抽象类的方法时抽象方法 //也可以是已经实现的方法
    C、继承抽象类的子类为抽象类 //但没完全实现
    D、实现接口的类为抽象类
    3.
    下列定义,正确的有哪些 ACD

    A、接口只能做方法申明,抽象类中就可以做方法实现和方法申明
    B、接口里只能有公共方法,1.8以后 可以有普通方法和成员变量
    C、抽象类中的抽象方法只能申明,不能实现.abstract void abc();不能加{}
    D、抽象方法要被实现,所以不能是静态的,也不能是私有的
    E、类实现接口,利用关键字implement 完成
    4.
    以下说法正确的是CE

    A、类是对象的抽象模型,刻画了对象中所有信息
    B、抽象方法不能用final来修饰 ,可以用satic来修饰
    C、对计算公式已不需要更改的数学函数,常用public static final 来修饰;
    D、若类中有final abstract来修饰 的 方法 ,必须实现该方法才能构造对象。
    E、引用是对象的名字,引用值是对象的起始地址
    5.
    下列的说法错误的是 BDE

    A、抽象类必须被子类继承
    B、对象向上转型以后,拥有相同名字的**普通成员变量(静态变量)**时,访问的是子类里面的
    //多态成员变量跟成员函数都可重写,但是只有成员函数被覆盖,向上转型之后访问成员函数是子类中重写的函数,但是成员变量是对应父类对象内存空间的。
    C、super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法的第一行
    D、抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造对象
    //抽象类
    E、接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰符修饰?
    在这里插入图片描述

    6.
    下面说法不正确得是ABCD

    A、不能和abstract一起使用的修饰符有static final public final
    B、接口不能存在普通方法和常量
    C、局部内部类public,private修饰符修饰
    D、接口不可以直接实例化,抽象类可以
    7.
    以下方法错误的是 AB

    A、覆盖方法包括成员方法的覆盖和成员变量的覆盖
    B、任何方法都可以被覆盖
    C、成员方法的覆盖是多态的一种表现形式
    D、子类可以调用父类中被覆盖的方法
    8.
    Person类和Test类的代码如下所示,则代码中的错误语句是C

    public class Person {
    public String name;
    public Person(String name) {
    this.name = name;
    }
    }
    public class Test {
    public static void main(String[] args) {
    final Person person = new Person(“欧欧”);
    person.name = “美美”;
    person = new Person(“亚亚”);
    }
    }
    A、final Person person = new Person(“欧欧”);
    B、person.name = “美美”;
    C、person = new Person(“亚亚”);
    D、没有错误
    9.
    如下Java代码运行的结果是C

    public class Test {
    final int age;
    public Test(){
    age=10;
    }
    public static void main(String[ ] args) {
    System.out.println(new Test().age);
    }
    }
    A、输出:0
    B、输出:null
    C、输出:10
    D、运行时出现异常
    10.
    以下代码中错误的语句有几处D

    public class Something{
    public static void main(String[] args){
    final Other o=new Other();
    new Something().addOne(o);//1
    }
    public void addOne( Other o){
    o.i++;//2
    o = new Other();//3
    }
    }
    class Other{
    public int i;
    }
    A、1
    B、2
    C、3
    D、0

    展开全文
  • 1.抽象类作为类一定有构造器,而且抽象类必须有构造器。 提供给子类创建对象调用父类构造器使用的。 2.抽象类虽然有构造器但是抽象类不能创建对象。 抽象方法没有方法体,创建对象不能执行,所以不能创建对象。 抽象...

    问题答案

    1.抽象类作为类一定有构造器,而且抽象类必须有构造器。
    提供给子类创建对象调用父类构造器使用的。
    2.抽象类虽然有构造器但是抽象类不能创建对象。
    抽象方法没有方法体,创建对象不能执行,所以不能创建对象。

    抽象类的注意事项

    1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
      理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

    2. 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的。
      理解:子类的构造器中,有默认的super()需要访问父类构造器。

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

    4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。

    5. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
      理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

    接口和抽象类的区别理解

    接口的设计目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。
    而抽象类的设计目的,是代码复用当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给各个子类自己实现。正是因为A-B在这里没有实现,所以抽象类不允许实例化出来(否则当调用到A-B时,无法执行)。

    展开全文
  • 如果不初始化父类实例,那么也就是说调用构造器并不一定初始化实例了,那这里的super(name)又有什么用处呢? 对这些疑问,自己很迷惑,所以只有求助于网络了。从网上找了些感觉比较靠谱的解释。 解释1:  ...
  • 存在构造器 即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,没有的话你的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super()。 扩展 抽象方法的类一定是抽象类 ...
  • 主要介绍了Java抽象类的构造模板模式用法,结合实例形式分析了java使用抽象类构造模板模式相关操作技巧,需要的朋友可以参考下
  • 它们的语法区别:1)接口不能有构造方法,抽象类可以。2)接口不能方法体,抽象类可以。3)接口不能静态方法,抽象类可以。4)在接口中凡是变量必须是public static final,而在抽象类中没有要求。忽然此...
  • Java抽象类中是否可以有构造方法

    千次阅读 2021-03-23 10:40:52
    所以既然抽象类是不允许被实例化的,那么他的构造方法存在是否还有实际意义? 直接上例子 //抽象父类 abstract public class Shape { public Shape(){ System.out.println("这是Shape的构造方法"); } p
  • 接口是我们常用的,抽象类好像并不是怎么常用,但这并不代表他不重要,他可以被继承,可以有构造方法,可以给类中的成员变量赋初值,接口就没有这样的功能。       抽象类的出现使得...
  • 问题1: ...疑问:接口和抽象类new出来是个什么东西呢? 可以使用匿名类的方式new出来,但必须实现接口中的所有接口方法和抽象类中的所有抽象方法。 那么为什么按钮单机事件setOnClickListe...
  • java规定类都要一个构造方法,没有默认提供一个空参构造 ...抽象方法需要被字类继承,字类的构造方法中是用super()调用父类的构造方法实例化的,如果抽象类没有构造方法,那么久无法被字类继承了。 ...
  • 抽象类含有构造器吗?

    千次阅读 2016-04-24 11:41:01
    抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。示例代码如下: package ahu; abstract class Base{ int a=7; ...
  • 构造器不就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器
  • JVAV中抽象类可以有构造方法吗?

    千次阅读 2020-09-24 00:02:40
    现在一些面试官问,如果你不能对抽象类实例化那么构造函数的作用什么?好吧,他可以用来初始化抽象类内部声明的通用变量,并被各种实现使用。另外,即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数...
  • 抽象类不可以被实现,但可以有构造方法!
  • Q:抽象类中一定有构造器,为什么不能实例化? A: ① 抽象类中的构造器是用来子类实例化的时候调用的,子类要加载父类的属性和方法。(不能因为是抽象类就和继承相矛盾) public class Demo01Test { @Test public...
  • 今天被问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类...
  • 首先,抽象类可以有构造器、静态方法,抽象类不一定要被其他类继承,可直接不实例化就使用 抽象类可以有构造器、静态方法。构造器能被子类继承并完成初始化,但不会创建抽象类的实例对象。静态方法的好处是不实例...
  • 抽象类和接口有什么区别

    万次阅读 多人点赞 2018-08-25 20:36:35
    抽象类可以有构造器 接口不能有构造器 与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型 访问修饰符 抽象方法可以 public 、 ...
  •  它可以有构造器,但是不能构造对象,抽象类中的构造器,在构造具体子类对象时调用,抽象方法决定抽象类抽象类中可以没有抽象方法,具体父类型可以作为引用类型的声明;抽象父类型也可以作为引用类型的声明;...
  • Java中抽象类和接口中有构造方法吗?

    千次阅读 2019-04-18 20:22:00
    (1) Java中抽象类和接口中有构造方法吗? ①在接口中 不可以有构造方法 在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。 A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需...
  • 这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造函数的具体类也可以被抽象类继承。但是,一旦将具体类的无参构造器设置访问修饰符为 private 时,抽象类则不可以...
  • Kotlin中的抽象类实现

    2020-08-25 09:49:47
    主要介绍了Kotlin中的抽象类实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 作用:用来初始化 java ,提供的初始化和实例化,以便调用。 二、作用 new一个对象的时候要用到构造函数,例如Hello hello = new Hello();这时调用的是Hello的无参数构造方法;Hello hello = new Hell
  • C++ 抽象类

    千次阅读 2020-10-01 15:04:00
    抽象类(接口) 接口描述了类的行为和功能,而无需完成类的特定实现 C++接口时通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类本类不能被用于实例化对象,只能作为接口使用。...
  • [Java基础]Java中抽象类和接口中有构造方法吗?

    万次阅读 多人点赞 2017-07-05 10:56:13
    2.问题描述:Java中抽象类和接口中有构造方法吗? 3.问题解答: (1)Java中抽象类和接口中有构造方法吗? ①在接口中 不可以有构造方法 在接口里写入构造方法时,编译器提示:Interfaces ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 339,317
精华内容 135,726
关键字:

抽象类的构造器有什么作用