精华内容
下载资源
问答
  • Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。子类中的构造方法的规则子类的构造过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类...

    Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。

    8d2702e38c6668ccf218bb9f71fc626d.png

    子类中的构造方法的规则

    子类的构造过程中必须调用其基类的构造方法。

    子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。

    如果使用this(argument_list)调用本类的另外构造方法。

    如果调用super,必须写在子类构造方法的第一行。

    如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。

    如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。

    示例如下:class SuperClass{

    private int n;

    //SuperClass(){

    // System.out.println("SuperClass()");

    //}

    SuperClass(int n){

    System.out.println("SuperClass(int n)");

    this.n = n;

    }

    }

    class SubClass extends SuperClass{

    private int n;

    SubClass(){

    super(300);//调用父类的有参构造方法

    System.out.println("SuperClass");

    }

    SubClass(int n){

    System.out.println("SubClass(int n):"+n);

    this.n = n;

    }

    }

    public class TestSuperSub{

    public static void main (String args[]){

    //SubClass sc = new SubClass();

    SubClass sc2 = new SubClass(200);

    }

    }

    依次验证上面的语法。

    展开全文
  • java的确有其局限性,但应该不是你所说的这个场景应该是你代码写的有问题那我这个场景应该怎么写呢你这种情况,应该用接口,而...如你所云:/*用创建Boy的构造方法造就出一个男孩,但其引用可以是Person类。*/Pers...

    java的确有其局限性,但应该不是你所说的这个场景

    应该是你代码写的有问题那我这个场景应该怎么写呢

    你这种情况,应该用接口,而不是继承。把要暴露出来的方法定义在接口,别人使用时候就不会出现转型问题了。

    男孩是人,但人未必是男孩。

    一个男童,是不是人?回答:是。所以,Boy的引用,可以看作是Person类的引用。如你所云:

    /*用创建Boy的构造方法造就出一个男孩,但其引用可以是Person类。*/Personp=newBoy();/*由于p是由创建Boy的构造方法造就出来的,所以可以将其引用转变成Boy类*/Boyboy=(Boy)p;

    但是,将一个父类引用转为子类引用,虽然编译通过,但动态执行时就会报错。这不是代码写得有问题,而是这种思维逻辑不对:

    一个人是否是男童?回答:未必。这就是你所说的情况:将一个父类引用转为子类引用,虽然编译通过,但动态执行时就会报错。所以

    /*创建一个Person类的实体(引用)*/Personp=newPerson();/*由于p是由创建Person的构造方法造就出的,尽管编译通过,但运行起来,就会停机报错*/Boyboy=(Boy)p;

    子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特。父类类型的引用只能调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的东西,是无可奈何的。因此,将父类类型的引用指向子类的对象,尽管编译通过,但在程序运行中,就会停机报错。理解很透彻啊

    父类必定不能转子类啊(当然你用父类引用引用的对象本身就是子类,自己转自己肯定没问题)...

    至于你出现这样的需求,不是java的问题,是在接口设计就有问题了。

    父类不能转子类嗯就是这样

    醒醒,这是面向对象的基础规则,什么时候变成安全性了

    先别写框架

    欢迎加入 java开发群262087628互相学习共同进步 请问:如何加入?

    逻辑不是很对,Person不是Boy专有的父类,你不能要求每个Person都能转换成Boy,可以添加一个条件pinstanceofBoy,只有当Person对象是Boy的实例的时候,才这样转换

    展开全文
  • Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?...构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出...

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?

    答案如下:

    当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:

    第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。

    第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。

    1 //当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。

    2 classAnimal{3 privateString name;4

    5 //如果你定义一个新的构造方法

    6 publicAnimal(String name) {7 this.name =name;8 }9 }10

    11 public Dog extendsAnimal{12

    13 //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的14 //无参构造方法Animal()

    15 publicDog(){16 super("小狗"); //显示调用父类的有参构造方法

    17

    18 .... //子类的构造方法处理

    19 }20 }21

    22 //当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:

    23 classAnimal{24 privateString name;25

    26 //无参的构造方法

    27 publicAnimal() {28 ..... //处理

    29 }30

    31 /*

    32 如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,33 子类在构造方法中会自动调用父类已经定义的无参构造方法。34 */

    35 publicAnimal(String name) {36 this.name =name;37 }38 }

    总结:不过一般的,在父类中使用了构造方法的重载,在子类中就可以根据需要,调用相应的父类构造方法。

    展开全文
  • 初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言Java也可以写出优雅的函数式调用,学习的过程并...

    如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言Java也可以写出优雅的函数式调用,学习的过程并不复杂,当你学会了Java8中函数式编程的新特性,你一定会对他爱不释手的。下面介绍一下基于Lambda表达式简写的两种引用。避免再次看到这种代码时的尴尬😅。

    方法引用

    方法引用,一般包含下面三种写法,传统的写法我们可能都是通过对象.去调用实例方法或使用类.调用静态方法,但是学完方法引用后,就可以可以使用这三种方式去调用方法,但是要符合一定的规则。

    对象::实例方法

    /**

    * 对象调用实例方法

    */

    public static void objMethod(){

    List list = new ArrayList<> ();

    list.add(1);

    list.add(2);

    list.add(3);

    list.forEach((i)->{

    PrintStream out = System.out;

    Consumer consumer = out::println;

    consumer.accept(i);

    });

    list.forEach(System.out::println);

    }

    最常用的System.out.println

    类::实例方法

    /**

    * 判断两个字符串是否相同

    *

    * @param str1

    * @param str2

    * @return

    */

    public static boolean isEqual(String str1, String str2) {

    BiPredicate b = (s1,s2)->s1.equals(str2); ①

    BiPredicate bp = String::equals;

    return bp.test(str1, str2);

    }

    类::静态方法

    /**

    * 比较大小

    * @param x

    * @param y

    * @return

    */

    public static boolean compareValue(int x, int y){

    Comparator compare = Integer::compare; ②

    return compare.compare(x, y) > 0;

    }

    其实不管是哪一种调用方式都是有规律可循的,这里总结一下在使用Lambda表达式的过程中符合什么样的规则才可以使用方法引用的模式去写。

    Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致 Integer::compare ②

    Lambda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时 可以使用ClassName::method ①

    构造方法引用

    简称花式new对象,一个简单的new对象也要写的高端、大气、上档次😄,既可以掌握新知识,又可以ZB,赶紧学习吧。

    ClassName::new

    资源类:

    public class Apple {

    private String color;

    private double weight;

    public Apple(){

    }

    public Apple(String color) {

    this.color = color;

    }

    public Apple(double weight) {

    this.weight = weight;

    }

    public Apple(String color, double weight) {

    this.color = color;

    this.weight = weight;

    }

    public String getColor() {

    return color;

    }

    public void setColor(String color) {

    this.color = color;

    }

    public double getWeight() {

    return weight;

    }

    public void setWeight(double weight) {

    this.weight = weight;

    }

    @Override

    public String toString() {

    return "Apple{" +

    "color='" + color + '\'' +

    ", weight=" + weight +

    '}';

    }

    }

    测试代码:

    public static void main(String[] args) {

    //无参构造

    //Supplier supplier = () -> new Apple(); Lambda表达式写法

    Supplier supplier = Apple::new;

    Apple apple = supplier.get();

    System.out.println("NoArgsConstructor: "+apple);

    //有参构造

    //Function function = (x) -> new Apple(x); Lambda表达式写法

    // 构造引用

    Function function = Apple::new;

    Apple apply = function.apply(1.0);

    System.out.println("OneArgsConstructor: "+apply);

    BiFunction bf = Apple::new;

    Apple bi = bf.apply("Red", 2.0);

    System.out.println("TwoArgsConstructor: "+bi);

    }

    输出结果:

    NoArgsConstructor: Apple{color='null', weight=0.0}

    OneArgsConstructor: Apple{color='null', weight=1.0}

    TwoArgsConstructor: Apple{color='Red', weight=2.0}

    当构造方法无参时使用Supplier,有一个参数时使用Function,两个参数时使用BiFunction。这里很容易得出一个规律,当使用构造方法引用时,函数式接口的参数列表需要和构造方法的参数列表保持一致。

    我们也可以用这些函数式接口改写传统的创建数组的方式,初始化一个指定长度的数组,比如

    Function fun = String[]::new;

    String[] strArr = fun.apply(10);

    也可以这样写:

    public static T[] initArray(int num, Function function){

    return function.apply(num);

    }

    调用:

    Apple[] strings = initArray(10, x -> new Apple[x]);

    System.out.println(strings.length);

    疑惑?

    根据传入的参数返回指定的对象数组引用,不过这样还不如直接创建。不知道读者有没有考虑这里为什么不可以用一个泛型来new,那样就可以创建一个通用数组引用,但是Java中的泛型是伪泛型,在编译器就会进行泛型擦除,所以不能通过new关键字来创建一个泛型对象,具体内容可以在查阅其他资料了解泛型以及泛型擦除的原理,这里不做深究。如果有其他写法,期待你的回复。

    展开全文
  • 看了半天愣是没看出来,这是怎么调用的其中的方法,如下: new ListenBeanJob(fal);//这是调用的方法 我赶紧去找父类里面的构造方法,按照执行顺序来说的话,应该是在父类里面的构造方法中调用了msfile()方法,...
  • 展开全部一般正常的都是参数多的调用参数少的。...那你有参的参数你需要怎么传呢。当然如果换一个角度也可以。我手写下。没经过IDE的。提供下思路。我有两种思路,写同一个功能。public class Person{privat...
  • 构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们...
  • 一:有参数构造方法在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名....DEMO:定义有参数构造方法上面定义了四个有参数构造方法,发现了构造方法可以重载,书写的习惯是重载的构造方法按照参数的个数...
  • 原因在于当实例化子类时会递归调用父类中的构造方法。而这又是为什么呢? 首先,这涉及到Java对象的生命周期。在Java中,对象的生命周期包括以下几个阶段: 创建阶段(Created) 应用阶段(In Use) 不可见阶段...
  • ● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String...
  • ● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String...
  • 把子类传递到父类的有参构造中,然后调用。使用反射的方式调用,你使用了反射还有谁不能调用的?!父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String[] args){...
  • ● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?!● 父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String...
  • 通过 lambda 表达式,我们...分别是:方法引用、构造器引用还有数组引用。说白了就是借用别人的轮子。提示:这篇文章结合函数式接口和lambda表达式进行讲解,Demo中应用了一些Java内置的函数式接口,比如 BiConsumer...
  • 问:实例化对象构造方法的流程是怎么走的?我输入DrawIconicon=newDrawIcon(800,800);这段程序不是应该只会自动调用DrawIcon的构造方法吗?为何还会实现其他方法?为何输出结果是42312...问:实例化对象构造方法的...
  • JAVA—继承构造方法的访问特点(super调用父类构造方法怎么调?super和this的区别) 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行子类构造;如下例子 父类: public ...
  • 2、构造方法的具体用处与使用引入:new对象的过程,实际上是调用的类中的默认的构造方法;这时你可能就有疑问了,如果是调用的方法,那创建一个类的时候并没有去创建一个所谓的构造方法啊?怎么就能直接调用了呢?...
  • Android开发中一般讲Java接口调用放在APP层,但是如果想对外隐藏Java...下面开始讲解JNI怎么调用Java方法。 首先模拟实现一个类,代表想隐藏的接口 代码如下:   package com.lb6905.jnidemo; import android....
  • 展开全部先小小纠正一下,java里面...首先,任何类都有构造方法,难怕是你不写,也会默认你有一个有无参构造方法。,所以你的A里面就会有一个叫A()的构造方法。当你new A()时,默认你有一个有无参构造方法A()的方法...
  • 把子类传递到父类的有参构造中,然后调用。使用反射的方式调用,你使用了反射还有谁不能调用的?!父类调用子类的静态方法。案例展示:package com.ywq;public class Test2{public static void main(String[] args){...
  • 这听起来很奇怪,但是可以在你正在嘲笑的对象上模拟一个构造函数调用.例:class RealGuy {....public void someMethod(Customer customer) {Customer customer = new Customer(145);}}class MyUnitTest() {public ...
  • 最新java二级,2013版的,第30页有个程序,说this的引用的,最后一个构造方法看不懂,而且,那真是构造方法?看我注析。。。publicclassBirthDate{privateintday=1;privateintmonth=...最新java二级,2013版的,第...
  • 提到:构造方法用this 作为参数调用 当时我没懂。 后来百度,看到也有小伙伴不懂。 于是,自己写了如下一段代码: BirthDate.java package meta; public class BirthDate { private int day = 1; private...
  • java怎么写构造函数1、java构造函数也叫构造方法,是java中一种特殊的函数。函数名与类名相同,无返回值。作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。(推荐教程:java...
  • 父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} // MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下...
  • java-构造方法

    2020-10-26 22:24:16
    关于java类中的构造方法: 1.java构造方法又被叫为构造函数/构造器/ 2.语法结构:【修饰符列表】构造方法名(形式参数列表) {构造方法体} 3.对于构造方法来说 ,“返回值类型”不需要指定,也不能写void 4.构造...
  • 实例化一个对象的时候,必然调用构造方法 package com.ty.servlet; public class Dawei { String name; float hp; float armor; int moveSpeed; // 方法名和类名一样(包括大小写) /...
  • Java 中父类怎么调用子类的方法

    万次阅读 2016-10-24 22:41:38
    ● 把子类传递到父类的有参构造中,然后调用。● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法。 案例展示: package com.ywq; public class Test2{ public static ...
  • 是否可以从另一个(在同一个类中,而不是从子类中)调用构造函数? 如果有,怎么样? 什么是调用另一个构造函数的最佳方法(如果有几种方法可以做到)?18个解决方案2568 votes对的,这是可能的:public class Foo {...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551
精华内容 220
关键字:

java怎么调用构造方法

java 订阅