package test;
class people{
private String name="people";
public void speak() {
System.out.println(this.getClass().toString()+" name="+name);
}
}
class man extends people{
String name="man";
}
class baby extends man{
String name="baby";}public class test {
public static void main(String[] args) {
people p=new people();
man m=new man();
baby b=new baby();
p.speak();
m.speak();
b.speak();
}
}
运行结果:
class test.people name=people
class test.man name=people
class test.baby name=peopleJava中的继承不是子类拥有父类非private的属性和方法么,为什么子类中输出的还是父类name定义的“people”呢?
class people{
private String name="people";
public void speak() {
System.out.println(this.getClass().toString()+" name="+name);
}
}
class man extends people{
String name="man";
}
class baby extends man{
String name="baby";}public class test {
public static void main(String[] args) {
people p=new people();
man m=new man();
baby b=new baby();
p.speak();
m.speak();
b.speak();
}
}
运行结果:
class test.people name=people
class test.man name=people
class test.baby name=peopleJava中的继承不是子类拥有父类非private的属性和方法么,为什么子类中输出的还是父类name定义的“people”呢?
private String name = "people"; public void speak() {
System.out.println(this.getClass().toString() + " name=" + this.name);
}
}class man extends people {
public void speak() {
super.speak();
}
}class baby extends man {
public void speak() {
super.speak();
}}public class test {
public static void main(String[] args) {
people p = new people();
man m = new man();
baby b = new baby();
p.speak();
m.speak();
b.speak();
}
}
class People{
private String name = "people";
public void speak() {
System.out.println(this.getClass().toString()+" name = "+name);
}
}
class Man extends People{
String name = "man";
public void speak() {
System.out.println(this.getClass().toString()+" name = "+name);
}
}
class Baby extends People{
String name = "baby";
public void speak() {
System.out.println(this.getClass().toString()+" name = "+name);
}
}
public class Test { public static void main(String[] args) {
People p = new People();
Man m = new Man();
Baby b = new Baby();
p.speak();
m.speak();
b.speak(); }}
输出结果:
class limoxin.People name = people
class limoxin.Man name = man
class limoxin.Baby name = baby
如下代码:
package com.lin.helloworld;class people{
private String name="people";
public void speak() {
System.out.println(this.getClass().toString()+" name="+name);
}
}
class man extends people{
String name="man";
public void speak() {
System.out.println(this.getClass().toString()+" name="+name);
}
}
class baby extends man{
String name="baby";
public void speak() {
System.out.println(this.getClass().toString()+" name="+name);
}}public class Test {
public static void main(String[] args) {
people p=new people();
man m=new man();
baby b=new baby();
p.speak();
m.speak();
b.speak();
}
}
每个方法有一个指向方法数据的指针,也就是父类的方法则指向父类的数据。所以实际调用的方法是该类拥有的方法(包括继承来的方法),但方法访问的数据则是该方法指向的数据(继承来的方法指向继承来的数据)