Java 从子类调用方法
在Start类中,我定义了两个对象并将信息作为参数传递给这些对象构造函数,然后在Person类中创建两个实例变量并在构造函数中实例化这两个变量。为什么我不能从Java 从子类调用方法,java,Java,在Start类中,我定义了两个对象并将信息作为参数传递给这些对象构造函数,然后在Person类中创建两个实例变量并在构造函数中实例化这两个变量。为什么我不能从类A调用getName()方法?如何从class A()调用getName()方法 公共类启动{ 公共静态void main(字符串[]args){ A对象A=新的A(“约翰”); B objectB=新的B(24); 人员a=新人员(对象a、对象B); a、 getAge(); } } 公共阶层人士{ A aa; B-bb; 人(A a
类A
调用getName()
方法?如何从class A()
调用getName()
方法
公共类启动{
公共静态void main(字符串[]args){
A对象A=新的A(“约翰”);
B objectB=新的B(24);
人员a=新人员(对象a、对象B);
a、 getAge();
}
}
公共阶层人士{
A aa;
B-bb;
人(A aa,B bb){
这个。aa=aa;
这个.bb=bb;
}
公众假期{
System.out.println(this.aa.getClass().getName());
System.out.println(this.bb.getClass().getName());
System.out.println(this.aa.getName());
}
}
公共A类{
公共字符串名称;
公用A(字符串名称){
this.name=名称;
}
字符串getName(){
返回此.name;
}
}
您可以简单地执行此操作
A a=new A();
String name=a.getName();
问题是,您已经使用默认访问权限声明了
getName
函数,即包私有,只要使用public
修饰符在class A
中声明函数,以防这些类位于不同的包中
public String getName()
您已经创建了一个由两种类型a、B参数化的泛型类Person。它们只是“占位符”,与您的类a、B没有任何共同之处。请从Person类中删除这些类型,它应该可以工作。这意味着你必须这样定义一个人:
public class Person {
//the rest of you code here
}
顺便说一句:您应该在这里得到一个编译器警告,“类型参数a正在隐藏类a”。如果类
Person
和类a
在不同的包中,您需要将getName()方法公开。它当前具有默认访问权限(包访问)。因此,它是不可见的,并且显示未定义的
public String getName() {
return this.name;
}
无需更改方法的访问修饰符,因为您将导入类A。这是因为Person类不知道类
A
或B
。您已经为类Person
指定了泛型类型参数-此处a
和B
并不表示a类或B类,它们是“变量名”为a和B的其他类类型的占位符。
当你说
A aa;
B-bb;
在类中,这意味着A和B将替换为在三角括号中创建类的对象时指定的类型。因为java是强类型语言,所以它应该保证无论您以后指定什么类型的代码都可以工作。它失败了,因为它不能保证以后指定为参数-A的任何类型都将具有getName()方法。您可以保证只允许传递属于a类子类的类型参数:
公共阶层人士{
T aa;
U-bb;
人员(T aa、U bb){
这个。aa=aa;
这个.bb=bb;
}错误是什么?getName()方法是否不可见?类型A的方法getName()未定义
public String getName() {
return this.name;
}
class A {
public String name;
A(String name) {
this.name = name;
}
String getName() {
return this.name;
}
}
class B {
public int num;
public B(int a ) {
this.num = a;
}
int getNum() {
return this.num;
}
}
public class Start {
public static void main(String[] args) {
A objectA = new A("John");
B objectB = new B(24);
Person a = new Person(objectA, objectB);
a.getAge();
}
}
**class Person{**
A aa;
B bb;
Person(A aa, B bb) {
this.aa = aa;
this.bb = bb;
}
public void getAge() {
System.out.println(this.aa.getClass().getName());
System.out.println(this.bb.getClass().getName());
System.out.println(this.aa.getName());
}
}