菜鸟问题!!请高手解决!

zyyj849185 2008-01-08 02:15:06
class SuperClass
{
public SuperClass()
{
}
public SuperClass(String s)
{
s=" ";
}
public void doSomething()
{
System.out.println("这是SuperClass输出的!");
}
}
class SubClass1 extends SuperClass
{
public void doSomething()
{
System.out.println("这是SubClass1输出的!");
}
public void doSth1()
{
System.out.println("这是doSth1输出的!");
}
}
class SubClass2 extends SuperClass
{
public void doSomething()
{
System.out.println("这是SubClass2输出的!");
}
public void doSth1()
{
System.out.println("这是doSth2输出的!");
}
}
public class testLayer
{
public static void main(String arge[])
{
SuperClass x = new SuperClass();
SuperClass y = new SubClass1();
SuperClass z = new SubClass2();
x.doSomething();
y.doSth1();
z.doSth2();
}
}
请高手改正!!谢谢!
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyyj849185 2008-01-08
  • 打赏
  • 举报
回复
哪我的题目是这样的呀!
构造一个类SuperClass,构造属于这个类的两个构造方法及一个普通的成员方法doSomething。再构造两个子类SubClass1及SubClass2继承自SuperClass。在两个子类中重写doSomething方法。在SubClass1类中新加一个doSth1方法。在SubClass2类中新建doSth2方法。声明三个SuperClass引用变量分别指向SuperClass对象,SubClass1对象和SubClass2对象,用它们分别调用成员方法doSomething、doSth1和doSth2看看结果是什么?分析为什么?
请高手再次赐教!
老紫竹 2008-01-08
  • 打赏
  • 举报
回复
SuperClass z = new SubClass2();


编译期间的检查。注定了你只能调用 SuperClass 里面的方法 doSomething,
不能调用 SubClass2 里面的 doSth1;
虽然他自己是 SubClass2();

当然,运行期间,是以实际的为准,也就是调用的是 SubClass2 的 doSomething,
老紫竹 2008-01-08
  • 打赏
  • 举报
回复
  public static void main(String arge[]) {
SuperClass x = new SuperClass();
SuperClass y = new SubClass1();
SuperClass z = new SubClass2();
x.doSomething();
y.doSomething(); //y.doSth1(); 这里错了
z.doSomething(); // z.doSth2(); 着了错了
}


你不用IDE 吗? 换 eclipse 吧!
cursor_wang 2008-01-08
  • 打赏
  • 举报
回复
class SuperClass {
public SuperClass() {
}

public SuperClass(String s) {
s = " ";
}

public void doSomething() {
System.out.println("这是SuperClass输出的!");
}

public void doSth1() {
// TODO Auto-generated method stub

}
}

class SubClass1 extends SuperClass {
public void doSomething() {
System.out.println("这是SubClass1输出的!");
}

public void doSth1() {
System.out.println("这是doSth1输出的!");
}
}

class SubClass2 extends SuperClass {
public void doSomething() {
System.out.println("这是SubClass2输出的!");
}

public void doSth1() {
System.out.println("这是doSth2输出的!");
}
}

public class testLayer {
public static void main(String arge[]) {
SuperClass x = new SuperClass();
SuperClass y = new SubClass1();
SuperClass z = new SubClass2();
x.doSomething();
y.doSomething();
z.doSomething();
y.doSth1();
z.doSth1();
}
}
cursor_wang 2008-01-08
  • 打赏
  • 举报
回复
你重写父类的方法,用父类的引用是可以调用的.而且调用的是子类里的方法,父类的方法被屏蔽了.但是父类看不到子类里的方法,所以父类的引用指向子类的对象,也调用不到子类里的方法的.只能子类自己的对象调用自己的方法.

class SuperClass {
public SuperClass() {
}

public SuperClass(String s) {
s = " ";
}

public void doSomething() {
System.out.println("这是SuperClass输出的!");
}


}

class SubClass1 extends SuperClass {
public void doSomething() {
System.out.println("这是SubClass1输出的!");
}

public void doSth1() {
System.out.println("这是doSth1输出的!");
}
}

class SubClass2 extends SuperClass {
public void doSomething() {
System.out.println("这是SubClass2输出的!");
}

public void doSth2() {
System.out.println("这是doSth2输出的!");
}
}

public class testLayer {
public static void main(String arge[]) {
SuperClass x = new SuperClass();
SuperClass y = new SubClass1();
SuperClass z = new SubClass2();
SubClass1 a = new SubClass1();
SubClass2 b = new SubClass2();
x.doSomething();
y.doSomething();//父类的方法被屏蔽了,调用的是子类里的方法
z.doSomething();//父类的方法被屏蔽了,调用的是子类里的方法
//y.doSth1();这里是不可见的,所以不能调用
//z.doSth2();这里是不可见的,所以不能调用
a.doSth1();
b.doSth2();
}
}


62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧