0721 封装、继承、多态

内存泄露:析构时未使用delete

野指针:*p=0,p指向未知的位置

 

内存创建对象:

初始化:

 

封装:隐藏内部细节,private属性,提供public方法

继承:JAVA单继承 子类可以获得父类的属性,supper恢复隐藏;可改写基类中的方法

       破坏了封装,使得父类的细节被子类知道了。

//P152
//不要在父类的构造函数中调用可以将被子类改写的方法
//我有一点疑问
class Base
{
    public void test()
    {
        System.out.printLn("parent test");
    }
    public Base()
    {
        test(); //此处进行调用
    }
}
class Derived extends Base
{    
    public String name;
    public void test()
    {
        System.out.printLn("son test"+name.length());
    }
    public static void main()
    {
        Derived d1=new Derived();
        //此时,先创建一个Base对象
            //调用Base的构造函数
                //调用test函数,为什么是子类的test函数。NOT父类的test函数
                //this 指针吗?
            
            //子类的test需要访问name,而此时子类name=null,指针异常
    }
}

//1.子类会暂存父类的属性,但是隐藏。注意不是覆盖

class Base
{
    public String tag;
}
class Derived extends Base
{

}
public class HiCode
{
    public static void main(String[] ,args)
    {
       Derived d=new derived(); //
      //创建该对象时保持两个tag变量
    }
}

多态:

//编译时类型 ,声明
//运行时类型,赋值
//P149 帮助理解多态
//b1.test()能通过并且表示子类方法
//在编译时检查,认为是Base类型,可调用Base的方法
//在运行时发现类型为Derived,实际调用Derived的方法

class Base
{
    public void partest()
    {
        System.out.printLn("parent test");
    }
    public void test()
    {
       System.out.printLn("base");
    }
}
class Derived extends Base
{
    public void test()
    {
        System.out.printLn("Derived");
    }
    public void sontest()
    {
        System.out.printLn("son test");
    }
    public static void main()
    {
        Base b1=new Derived(); 
        b1.partest();//运行时。显示正常
        b1.test();//运行时。。显示出的是子类的行为特性
        //b1.sontest(); 编译出错
        //虽然b1所引用的变量中的确有这个方法,但是。
        //b1在编译时不通过,是Base方法
    }
}
posted @ 2014-07-22 18:21  爱吃萝卜干  阅读(84)  评论(0编辑  收藏  举报