我对编程很新,我有一个问题请帮助我。 (这个问题是java问题,但我不记得语法,但我在这里写的主要是它。)
A class Person speaks "i am a person"
A class Student speaks "i am a student"
Student extends from Person
Person p = new Student
那么什么是p呢?
答案 0 :(得分:12)
p
只是变量,它不会改变其中对象的类型。
你可以想到一个杯子:你可以在其中加入任何液体,但杯子不会改变液体类型。
abstract class Fluid{
public String getTemp(){
return "unknown";
}
}
class Coffee extends Fluid{
public String getTemp(){
return "hot";
}
}
class Cola extends Fluid{
public String getTemp(){
return "ice-cold"
}
}
Fluid cup = new Coffee();
System.out.println(cup.getTemp()); //It's coffe in there, so it's hot!
答案 1 :(得分:9)
p
既是Student
又是Person
,但如果您调用方法(如whoAreYou()
),Java会首先尝试在Student
中找到它}然后在Person
。
答案 2 :(得分:7)
“我是学生”?
答案 3 :(得分:5)
我想我知道你的意思......
p会说他是学生,因为你会覆盖这个人说话的方法。在Java中,它应该如下所示:class Person
{
public void speak()
{
System.out.println("I'm a person!");
}
}
class Student extends Person
{
@Override
public void speak()
{
System.out.println("I'm a student");
}
}
答案 4 :(得分:4)
"i am a student"
这是Java的polymorphism
。方法speaks()
在base
类Person
中定义,在overridden
类derived
中为Student
。
在Java中,基类reference
可以引用派生类对象,并且当在这样的引用上调用重写方法时,引用引用的对象的type
决定要执行的方法的版本。
答案 5 :(得分:2)
即使您对p
的引用被声明为Person
,p
实际上也是Student
的实例。因此,无论学生说什么,p
都会“说话”。
将“Student
实例称为”Person
“是合法的,因为”学生从人员延伸“。
答案 6 :(得分:2)
答案 7 :(得分:2)
以上问题完全属于继承机制不同实体使用的相同属性。
class Person {
String identity;
Person() {
this.identity = "Person";
System.out.println("A class " + this.getClass().getName()
+ " speaks i am a " + identity);
}
}
public class Student extends Person {
public Student() {
this.identity = "Student";
System.out.println("A class " + this.getClass().getName()
+ " speaks i am a " + identity);
}
public static void main(String[] args) {
Person p = new Student();
}
}
答案 8 :(得分:0)
这里p会说我是学生。这是动态绑定的一个例子。
答案 9 :(得分:0)
有动态方法调度/动态绑定。
人p =新学生();
p是一个引用于Student对象的Person类型的引用变量.Student是子类,Person是扩展的父类。两个类都有静态或不静态的方法。
答案 10 :(得分:0)
在Java中,当学生从Person扩展时,您可以决定学生从人那里调用什么样的行为,您可以限制学生说是否是人,您可以将其实现为静态,然后静态方法不会被覆盖。他们只是影子。如果您故意想要实例方法,那么您可以实现其特定行为。
答案 11 :(得分:0)
这里P是持有子类对象的Parent类Object。这是因为这里存在父子关系(通过继承),因为您将Parent类扩展到Student类中。因此,Parent类Object可以保存其所有子类的对象。现在P可以访问其子类的所有属性。
答案 12 :(得分:0)
人“P”是这里用学生的对象初始化的参考。因此,当程序的执行开始时,将在运行时调用Student的类函数。
答案 13 :(得分:0)
P会说话:我是学生。
但它只会有两个类的共同行为。学生有但不在人的任何行为,P将无法访问该行为。
答案 14 :(得分:0)
这里显示了像超类这样的多态的概念可以保存子类的引用,同时它也显示了继承的概念,如学生是一个人意味着类学生扩展了人。所以这里的人是超级班,学生是儿童班。根据多态性,Person Class(Super Class)可以保存Student类(Sub-Class)的引用。
答案 15 :(得分:0)
这是java中单继承的一个例子。在这个例子中," Person"是一个基础类,其中"学生"是派生类。除非指定任何内容,
Person p=new Student();
object p(看起来像Person的对象)将访问Student类的属性,该属性覆盖了自己的基类Person的属性。
答案 16 :(得分:0)
如果该方法不是静态的,则将像其他人提到的那样调用Student的方法。请注意,如果方法是静态的,那么将调用Person的方法。这称为隐藏。
答案 17 :(得分:0)
我猜是"i am a student"
。这是basic polymorphism。