精华内容
下载资源
问答
  • 抽象类的构造方法

    2019-12-11 15:49:33
    1、抽象类的说明 抽象类不能被实例化(也就是不能直接 new 抽象类()),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是...

    1、抽象类的说明

    1. 抽象类不能被实例化(也就是不能直接 new 抽象类()),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

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

    3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

    4. 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。

    5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

    2、抽象类带有无参的构造方法

    public abstract class Father {
        public Father(){
            System.out.println("抽象类的构造参数");
        }
    }
    
    public class Son extends Father {
        public Son() {
            System.out.println("子类的构造参数");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Father father = new Son();
    
        }
    }
    

    输出结果:

    抽象类的构造参数
    子类的构造参数
    
    

    3、抽象类带有有参的构造方法

    public abstract class Father {
        public Father(String param){
            System.out.println("抽象类的构造参数" + param);
        }
    }
    
    public class Son extends Father {
        public Son(String params) {
            super(params);
            System.out.println("子类的构造参数" + params);
        }
    
    }
    
    public class Test {
        public static void main(String[] args) {
            Father father = new Son("aaaa");
    
        }
    }
    

    输出结果:

    抽象类的构造参数aaaa
    子类的构造参数aaaa
    

    也就是说:在生成子类对象前,必须要先调用抽象父类的构造方法

    展开全文
  • 一、接口和抽象类的构造方法  1、抽象类可以有gouz

    抽象类可以有构造方法,而接口不可以有构造方法。

    展开全文
  • 抽象类的构造方法 抽象类中包含无参构造方法 例: public abstract class A { public A(){} public A(String s){} public A(String s,int a){} } 这种情况,子类可以不显示写构造方法,会隐式调用。 ...

    抽象类中的构造方法

    • 抽象类中包含无参构造方法

    例:

    public abstract class A {
    
        public A(){}
    
        public A(String s){}
    
        public A(String s,int a){}
    }

    这种情况,子类可以不显示写构造方法,会隐式调用。

    public class A1 extends A {
    }
    • 抽象类中只有有参构造方法
    public abstract class A {
        
        public A(String s){}
    
        public A(String s,int a){}
    }

     这种情况,子类必须实现至少一个构造方法。且必须显示调用父类。并且super()必须放在构造方法的第一行。

     

     

    其他:

    这个问题是在使用SQLiteOpenHelper时注意到的。我写了一个子类继承它发现除了要实现抽象方法外,还强制必须重写构造方法,然后就想知道这种强制要求是如何实现的,最终发现是由关键字abstract控制。

    另外,在重写的时候,还注意到:

    只有三个构造方法,但SQLiteOpenHelper中有四个public构造方法,

    在其中一个的注释中发现有 @hide 的标识,这个是不能重写的,但也会被调用到。影响倒是不大。

     

    然后还了解到了一个注解@RequiresApi

    SQLiteOpenHelper的构造方法中有一个是只能在API>=28的版本中使用的,如果我们的 minSdkVersion 小于28,那么就需要这个注解说明一下。如下:

    @RequiresApi(api = Build.VERSION_CODES.P)
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, int version,
                                @NonNull SQLiteDatabase.OpenParams openParams) {
            super(context, name, version, openParams);
        }
    @RequiresApi(api = Build.VERSION_CODES.P)
    表示只能在api >= Build.VERSION_CODES.P的时候才能调用。
    
    展开全文
  • 首先,大家要明确一个概念,就是抽象类无法被实例化,只能通过子类继承 extends (一个子类只能继承一个抽象类)并且子类必须全部覆写抽象类全部抽象方法。 下面我以一段代码为例进行讲解 class AbstractDemo...

    首先,大家要明确一个概念,就是抽象类无法被实例化,只能通过子类的继承 extends (一个子类只能继承一个抽象类)并且子类必须全部覆写抽象类中的全部抽象方法。

    下面我以一段代码为例进行讲解

    class AbstractDemo01 {
        public static void main(String[] args) {
            B b = new B("哦");
            B b2 = new B();
        }
    }
    
    abstract class A {
        public A() {      
            System.out.println("抽象类A的构造方法");
        }
    }
    
    class B extends A {
        public B() { }
    
        public B(String name) {
            super(); //没有这句代码内部也会调用,默认隐式加上这句 
            System.out.println(name);
        }
    }
    

    上面代码的输出结果为

    • 抽象类A的构造方法
    • 抽象类A的构造方法

    下面我们来分析

    • 首先,因为抽象类的构造方法不可直接使用,也就是不能new,所以我们设置了一个子类B 去继承了抽象类A
    • 我们回到主函数,初始化一个B类的对象b,并传入参数,此时会调用B类中的有参构造方法B(String name),第一行会默认执行super(),即抽象类A中的构造方法A(),此时控制台输出 抽象类A的构造方法
    • 接下来执行语句System.out.println(name),即输出
    • 接着初始化一个B类的对象b2,此时会调用B类中的无参构造方法B(),因为B()方法体为空的,所以只执行默认执行的语句super(),即抽象类A中的构造方法A(),此时控制台输出 抽象类A的构造方法。此时主函数运行完毕。

    大家一定要好好理解这段代码,一定会有不一样的收获哦!!

    如果这篇文章帮助到你的话,来点个点赞,留言加关注把!!之后我会分享更多知识点给大家!!

    展开全文
  • 抽象类的知识点总结: 1.抽象类 不可以实例化对象(因为抽象类中会有可能有抽象方法) 如果该抽象类可以创建对象,则会有可能调用抽象方法,但是因为抽象方法没有方法体(我们说调用方法的目的就是为了使用他的方法体的...
  • JAVA不支持多继承,单继承使JAVA继承关系很简单,一个只能有一个父类,易于管理程序,同时一个可以实现多个接口,从而克服单继承缺点。 继承好处? 1、这种技术使得复用以前代码非常容易。 2、让...
  • java抽象类的构造方法和普通类的构造方法一样都是用来初始化成员变量的。只是抽象类的构造方法不能直接调用,因为抽象类不能实现实例。**但是一旦一个普通类继承了抽象类,便也可以在构造函数中调用其抽象类的构造...
  • 目录抽象类特点接口特点(JDK8以前)抽象类中构造方法的作用 抽象类特点 抽象类中可以有普通成员...抽象类中可以有构造方法, 抽象类的构造方法的权限修饰符可以是任意; 抽象类中可以有变量, 也可以有常量; 普通...
  • 抽象类构造方法的使用

    千次阅读 2018-05-08 15:58:29
    //抽象类构造方法的使用package Extends;abstract class Persons{//定义一个抽象类 String name; int age; char sex; //定义一个构造函数 public Persons(String name,int age,char sex){ this.name = name; ...
  • 抽象类构造方法

    2016-08-03 11:20:00
    含有abstract修饰符class即为抽象类,abstract类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象。abstract class 类中定义抽象方法必须在具体 ...
  • java抽象类构造方法吗?

    千次阅读 2020-05-27 21:50:09
    定义抽象类 格式 : abstract class 类名{} 举例 : 抽象类 方法 抽象方法 abstract void eat();...抽象类中,有构造方法,但是有不能new,那么构造方法干嘛呢? 给子类用!!! 抽象类,一样可以使用多态来创建子
  • 文章目录抽象类和抽象方法的构造抽象类和抽象方法的使用使用抽象类和抽象方法的注意事项 抽象类和抽象方法的构造 在 class 前使用 abstract 修饰的类叫抽象类 要构造抽象方法,其所在的类一定要是抽象类方法面前...
  • 抽象类构造方法

    2021-01-07 09:52:45
    抽象类中存在构造器,是给子类用
  • 抽象类是有构造方法的。 因为,虽然抽象类不能...直接指向父类、即所继承的抽象类的构造方法,因此抽象类必有构造方法。 接口是没有构造方法的。 因为接口与类之间的关系是实现,而非继承,所以不存在构造方法。 ...
  • 答案是肯定的。 在抽象类中定义构造函数,在语法上并不会报错,那么说明构造函数是可以存在的。...也可以在子类中调用父类的构造方法。 阅读如下代码: 父类: public abstract class Demo1 { String name; String se
  • 来看这样一段代码,试问它输出是什么?
  • java中 抽象类构造方法的理解

    千次阅读 2016-08-03 12:20:54
    抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。...抽象类虽然不能自己实例化对象,但是在子类新建对象调用子类的构造方法时会先调用抽象类的无参构造方法,这样一来,就可以给给抽象类的参数赋值了。
  • 抽象类的特点 抽象类和抽象方法必须使用abstract关键字修饰 public abstract class 类名{} public abstract void eat(); 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类 抽象类不能实例化 抽象类只能...
  • Java抽象类构造方法

    2019-09-24 03:48:56
    java中抽象类的子类的构造方法会隐含父类的无参构造方法。 package com.zempty.abstractclass; public class AbstractDemo01 { public static void main(String[] args) { B b = new B("哦"); } } ...
  • 抽象类与接口的构造方法

    千次阅读 2016-02-12 09:14:29
    首先抽象类是有构造方法的,我先前一直以为抽象类不能实例化所以是没有构造方法的,,显然这个想法是错误的,因为构造器跟对象没有关系。在此明白一点构造器并不是产生...下面来说说抽象类的构造器是干什么用的: abst
  • 抽象类的构造方法

    千次阅读 2009-04-09 23:23:00
    那么必须显式的写出一个无参的构造方法 public 类名{ } 不然的话 在后面类实现的时候就会报错 但是在这里 我看了一个视频 , 它的 抽象类中只写了一个带有2个参数的构造方法 , 没有写无参的 public Person(S
  • 建议90:不要为抽象类提供公开的构造方法 首先,抽象类可以有构造方法。即使没有为抽象类指定构造方法,编译器也会为我们生成一个默认的protected的构造方法。下面是一个标准的最简单的抽象类: ...其次,抽象类的
  • //抽象类不能new,只能通过子类去实现:约束 //抽象类里可以写普通方法 //抽象方法必须在抽象类中 ... System.out.println("抽象的构造方法"); } } class dog1 extends Animal1{ public dog1() { su
  • 子类在继承抽象类时会默认调用父类的无参构造,如果抽象类没有提供无参构造方法,则子类必须通过super()的形式调用指定参数的构造方法抽象类中定义构造方法的例子: package com.mydemo; public class ...
  • 重写和重载的区别:  * 1、重载:一个类中方法之间的关系,重写:父类方法被子类重写  * 2、重载它对权限修饰符、返回值没有限制。 但是重写有。子类的权限修饰符。... 接口和抽象类的区别:  * 1

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,664
精华内容 5,865
关键字:

抽象类的构造方法