记住:父类引用子类对象
Student t = new Student();
实例化一个Student的对象,这个不难理解。但当我这样定义时:
Person p = new Student();
这代表什么意思呢?
很简单,它表示我定义了一个Person类型的引用,指向新建的Student类型的对象。由于Student是继承自它的父类Person,所以Personl类型的引用是可以指向Student类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特。
定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
package com.hyg.base;
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st = new Student( );
System.out.println(st. getInfo());
System.out.println("-------------------");
Person1 p = new Student();
System.out.println(p.getInfo());
}
}
class Person1{
protected String name = "张三";
protected int age;
public String getInfo() {
return "Name:"+name+"\nage:"+age;
}
}
class Student extends Person1 {
protected String name = "李四";
private String school = "New Oriental";
public String getSchool() {
return school;
}
public String getInfo() {
return super.getInfo() + "\nschool: " + school;
}
}
另外:
package com.hyg.base;
public class PrivateMethodDemo {
public static void main(String[] args) {
//继承
Koo koo =new Foo();
koo.test2();
System.out.println("------");
Foo foo = new Foo();
foo.test2();
System.out.println("------");
Koo koo1 = new Koo();
koo1.test2();
}
}
class Koo{
public void test2() {
a();
b();
}
private void a() {
System.out.println("Call Koo a()");
}
public void b() {
System.out.println("Call Koo b()");
}
}
class Foo extends Koo{
public void a() {
System.out.println("Call Foo a()");
}
public void b() {
System.out.println("Call Foo b()");
}
}
如果父类中方法a是public类型
package com.hyg.base;
public class PrivateMethodDemo {
public static void main(String[] args) {
//继承
Koo koo =new Foo();
koo.test2();
System.out.println("------");
Foo foo = new Foo();
foo.test2();
System.out.println("------");
Koo koo1 = new Koo();
koo1.test2();
}
}
class Koo{
public void test2() {
a();
b();
}
public void a() {
System.out.println("Call Koo a()");
}
public void b() {
System.out.println("Call Koo b()");
}
}
class Foo extends Koo{
public void a() {
System.out.println("Call Foo a()");
}
public void b() {
System.out.println("Call Foo b()");
}
}
即