java接口多态两种方法创建参数导致其中一种报错,如何理解此类报错?

为什么用两种不同的构造方法会导致flyable无参构造方法出错呢?
我的想法是flyable不含有name和age属性,但是带参构造为什么又可以呢?

//测试接口
public class TextFly {
    public static void main(String[] args) {
        Person xiaoming = new Person();
        xiaoming.age=20;
        xiaoming.name="xiaoming";
        xiaoming.fly();
        //带参构造方法
        Flyable fly = new Person("xiaoli",22);
        fly.fly();
        
        //无参构造方法(报错部分,报错提示为name cannot be resolved or is not a field,age cannot be resolved or is not a field)
        Flyable flyable=new Person();
        flyable.name="xiaohua";
        flyable.age=30;
    }

//Person 类
public class Person implements Flyable{
    String name;
    int age;
    public void eat() {
        System.out.println(name+"吃东西");
    }
    public void sleep() {
        System.out.println(name+"在睡觉");
    }
    public Person() {
        // TODO Auto-generated constructor stub
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public void fly() {
        System.out.println(name+"开始飞了");
    }
}

//接口
package com.qf.Five;

public interface Flyable {
    void fly() ;
}

在 Java 中,接口类型的变量指向实现类(Flyable fly = new Person("xiaoli",22);) 或父类的变量指向子类被称为多态,多态可以在运行时确定具体的方法实现。

  • 无参构造方法报错
    由于 Person 类中没有定义一个无参数的构造方法,因此 new Person() 这个代码,编译器无法找到对应的构造方法,从而报错。

  • 但是带参构造为什么又可以呢?
    由于 Person 类中定义了带参数的构造方法 public Person(String name, int age) {},因此可以通过 new Person("xiaoli",22) 调用这个构造方法实例化 Person

  • flyable.nameflyable.age 报错
    Flable 类型的变量能接受其实现类 Person 的实例,但是由于 Flable 接口中没有成员变量 nameage,编译器编译时找不到对应的变量从而报错。不管是变量和方法,只有定义的类型中存在才能引用。

如有帮助,请采纳。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632