在java中,父类更普遍,子类更具体?我理解不了...
public class Father
{
void fatherMethod()
{
}
}class son extends Father
{
void sonMethod1()
{
}
void sonMethod2()
{
}
.....
}
这里son类不是有更多的成员函数吗?son类的实例应该是包含father 的方法的吧?怎么说father更普遍呢?不懂....
public class Father
{
void fatherMethod()
{
}
}class son extends Father
{
void sonMethod1()
{
}
void sonMethod2()
{
}
.....
}
这里son类不是有更多的成员函数吗?son类的实例应该是包含father 的方法的吧?怎么说father更普遍呢?不懂....
因为father 本身就是一个子类
一般例子中的 父类或者称为基类 都是比较抽象的类 例如 人 狗 等 基类一般是对同种类型事物的抽象
而子类是比较具体的 例如 男人 狼狗等 是基类的一种具体实现
楼主 看看JAVA编程思想的 抽象 继承 多态的概念 就明白了
一个父类的实例,可以用子类来定义
father f= new son();
这里我比较困惑.这么做是合法的,但是我比较困惑的是,f就拥有了son的所有方法?
这是为什么呢?
class 人
class 男人 extends 人
class 女人 extends 人根据常识应该可以知道,一个“男人”肯定是一个“人”,因此把子类对象赋值给父类类型的变量是合理的:
人 obj1 = new 男人();
人 obj2 = new 女人();father f = new son();
“但是我比较困惑的是,f就拥有了son的所有方法?”f 虽然是父类的变量,但它实际上它引用的是子类的一个对象,或者说内存中实际存在的是一个子类对象,你只不过是把它当作父类类型的一个对象来看待而已。比如,“刘春华”是一个“人”,他是类型“人”的一个对象。而刘春华更加具体的类型是“女人”:
人 liuchunhua = new 女人();这个对象的类型虽然是“人”,但实际上它的具体类型是“女人”,这一点不会因为我们把它当父类类型来看而发生变化。因此,“刘春华”可以做“女人”才可以做的事,比如生孩子。
我试过了,好像即便把子类对象赋值给父类变量,父类变量也无法访问子类对象特有的方法。我的代码是这样的:class A
{
public int a=1;
public void f1(){
System.out.println("f1,class A");
}
}class B extends A
{
public int b=2; public void f1(){
System.out.println("f1,class B");
}
public void f2(){
System.out.println("f2,class B");
}
}
class Hello
{
public static void main(String args[]){
A a1=new A();
B b1=new B();
a1=b1;
a1.f1();
//a1.f2(); 这里编译出错,说f2()未定义。
A a2=new B();
//a2.f2(); 同样编译出错。
}
}