Java 多态性问题
我一直在读关于如何编写Java8多态性的书 我有以下代码:Java 多态性问题,java,polymorphism,Java,Polymorphism,我一直在读关于如何编写Java8多态性的书 我有以下代码: public class Person { // instance variables - replace the example below with your own private String lastname; private String firstname; private int age; private boolean married; private float sal
public class Person
{
// instance variables - replace the example below with your own
private String lastname;
private String firstname;
private int age;
private boolean married;
private float salary;
/**
* Constructor for objects of class Person
*/
public Person(String lastname, String firstname, int age, boolean married, float salary)
{
// initialise instance variables
this.lastname = new String(lastname);
this.firstname = new String(firstname);
this.age = age;
this.married = married;
this.salary = salary;
}
public String getLastName() {return lastname;}
public String getFirstName() {return firstname;}
public int getAge() {return age;}
public boolean isMarried() {return married;}
public float getSalary() {return salary;}
}
public class MarriedPerson extends Person
{
// instance variables - replace the example below with your own
private int children;
/**
* Constructor for objects of class MarriedPerson
*/
public MarriedPerson(String lastname, String firstname, int age, float salary, int children)
{
// initialise instance variables
super(lastname, firstname, age, true, salary);
this.children = children;
}
public int getNoOfChildren()
{
// put your code here
return children;
}
}
abstract class MyTester
{
public static void main(String[] args) {
Person p1 = new Person("Kings", "Paul", 22, true, 1200f);
MarriedPerson mp1 = new MarriedPerson("Tront", "Betty", 31, 980.5f, 3);
System.out.print(p1.getFirstName()+" "+p1.getLastName()+" is "
+p1.getAge()+" years old, gets a "+p1.getSalary()
+" Euros salary and is");
if (p1.isMarried() == false)
System.out.print(" not");
System.out.println(" married.");
System.out.print(mp1.getFirstName()+" "+mp1.getLastName()
+" is " +mp1.getAge()+ " years old, gets a " + mp1.getSalary()
+" Euros salary and is" + " married with ");
if (mp1.getNoOfChildren() > 0)
System.out.print(mp1.getNoOfChildren());
else System.out.print("no");
System.out.println(" children.");
}
}
在阅读一本书时,我没有看到包含主函数的抽象类,所以我有点困惑
为什么我们将MyTester类声明为抽象类?这有必要吗
我现在在Person类中创建了一个printInfo方法。请参阅以下代码:
public class Person
{
// instance variables - replace the example below with your own
private String lastname;
private String firstname;
private int age;
private boolean married;
private float salary;
/**
* Constructor for objects of class Person
*/
public Person(String lastname, String firstname, int age, boolean married, float salary)
{
// initialise instance variables
this.lastname = new String(lastname);
this.firstname = new String(firstname);
this.age = age;
this.married = married;
this.salary = salary;
}
public String getLastName() {return lastname;}
public String getFirstName() {return firstname;}
public int getAge() {return age;}
public boolean isMarried() {return married;}
public float getSalary() {return salary;}
public void printInfo(){
System.out.print(p1.getFirstName()+" "+p1.getLastName()+" is "
+p1.getAge()+" years old, gets a "+p1.getSalary()
+" Euros salary and is");
if (p1.isMarried() == false)
System.out.print(" not");
System.out.println(" married.");
}
}
abstract class MyTester
{
public static void main(String[] args) {
Person p1 = new Person("Kings", "Paul", 22, true, 1200f);
MarriedPerson mp1 = new MarriedPerson("Tront", "Betty", 31, 980.5f, 3);
p1.printInfo();
mp1.printInfo();
}
}
当我编译修改后的代码时,它给了我一个错误:找不到符号变量p1。为什么呢?我需要做什么才能解决这个问题?
第二个代码比第一个代码有什么优势?没有。这没有什么区别,因为类除了作为入口点之外从未被扩展或使用过。MyTester没有任何抽象方法,所以抽象是没有意义的。唯一的原因可能是阻止MyTester类的实例化,因为实例的存在可能没有意义 MyTester被声明为抽象的,因此您不能创建它的任何实例(您没有理由这样做)。看,上面写着: 抽象类是一个声明为抽象的类,它可能是抽象的,也可能是抽象的 不包括抽象方法。抽象类无法实例化, 但它们可以是子类的 当我编译修改后的代码时,它给了我一个错误:找不到符号变量p1。为什么呢?我需要做什么才能解决这个问题 供将来参考:您应该创建一个新问题,而不是编辑现有问题。此外,如果有人解决了你的第一个问题,你应该总是很好地接受他们的答案 无论如何:您得到了这个错误,因为您的对象在主类中只“已知”为p1。 在“printInfo()”方法中,您试图让对象本身进行调用。因此,要么删除“p1.”部分,只调用“getFirstName()”之类的方法,要么显式调用“this.getFirstName()” (“this”是指当前对象实例的java关键字。)
提示:获得一个好的JAVA IDE,如Eclipse(),您甚至在编译之前都会看到类似的简单错误。不,这不是必需的。您的答案是否涉及第二个问题,该问题给出了关于变量p1的错误?不,但对于该问题,请将
p1
替换为this
谢谢911dibush。我认为一个相关问题的新问题不会得到回答。我正在使用BlueJ,但将来我将使用NetBeansaswell@Downvoter,请评论?我知道答案并不深入,但这里需要简单,因为问题只问一个简单的问题。它后来被编辑成包含更多的问题,但我在被问到之前就回答了。