为什么用两种不同的构造方法会导致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.name
、flyable.age
报错
Flable 类型的变量能接受其实现类 Person 的实例,但是由于 Flable 接口中没有成员变量 name
和 age
,编译器编译时找不到对应的变量从而报错。不管是变量和方法,只有定义的类型中存在才能引用。
如有帮助,请采纳。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!