黑马程序员----十-面向对象五

来源:互联网 发布:网络交易平台怎么做 编辑:程序博客网 时间:2024/04/30 02:31

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

==========================================
10-01-01
==========================================

1.多态的好处
  提高了代码的扩展性,前期定义的代码可以使用后期的内容.

2.多态的弊端
  前期定义的内容不能使用(调用)后期子类的特有内容.

3.多态的前提
  1必须有关系,继承或实现
  2要有覆盖

4.instanceof  例如 Person p=new Person()
  Person instanceof p 为true

==========================================
10-01-10
==========================================

1.多态中的静态函数
静态的话就会调用父类,因为new Zi()根本不会被调用.

2.内部类
 1内部类可以直接访问外部类中的成员
 2外部类要访问内部类,必须建立内部类的对象
 3一般用于类的设计
 4分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就把还有的事物定义成内部类来描述.

3.内部类生成的class文件是Outer$inner.class
外部访问内部可以创建方法,创建内部类再访问

4.如果静态内部类,加载外部类时,内部类直接存在.就相当于一个外部类.注意:内部类中不能有静态成员.内部类在局部位置上只能访问局部中被final修饰的局部变量

==========================================
10-1-15
==========================================

1.匿名内部类就是内部类的简写格式
  有前提:
 内部类必须继承或者实现一个外部类或者接口

2.没名字怎么new呢?
  必须有个明确的父类,所以必须继承或者实现一个外部类或者接口.

3.为什么不能创建抽象对象,因为有抽象方法.
  如果想创建抽象对象,要先复写抽象方法.
  所以 new Demo(){void show(){}};
  就可以创建抽象对象Demo,这个Demo是子类.

4.匿名内部类其实就是一个匿名子类对象.
  1new一个父类或接口
  2复写里面的方法
  3可以写其他方法

5.因为是创建匿名对象,可以直接在后面调用里面的方法.类里可以创建对象,方法里也可以创建对象.

==========================================
10-1-16
==========================================

1.如何实现一个匿名对象里的多个方法
  那就用父类对象new.
  Inter in=new Inter(){}
  in.show1();
  in.show2();

2.通常使用场景之一:
  当函数参数是接口类型时,而且接口中的方法不超过三(不包含3),可以用匿名内部类作为实际参数进行传递.方法太多就失去阅读性.

==========================================
10-1-17
==========================================

1.在主函数中new Inner(); 为什么不行
  因为主函数不能直接访问自己的非静态的内部类Inner.

2.如果是用父类来命名,那么父类中有几个方法就只能用几个方法.
  Inter in=new Inter(){}

3.可以直接new Object(){}
  但是一样不能命名.

4.创建的是匿名子类对象,所以命名时,那么子类对象就向上转型了,那么就不能使用子类方法了.
 
==========================================
10-1-18
==========================================

1.内存图解综合一下
  先出来show...0,然后是constructor...9,
  因为new的时候显示初始化还没有进行,先是默认初始化0,super走了show(),但是这时候还没有显示初始化,所以显示初始化在super()后面.

2.上次自己发现不能在类中直接写执行代码,原来只要加一个大括号,就可以直接写,而且会在构造函数之前执行.

3.当在局部代码块里面int num时,就是他自己的num,当他改变了num,就是类的num.

4.c9,f,s10,z10错误
  f,s0,c9,z10正确
  如果父类有aaa,那么
  aaa,f,s0,c9,z10
原因:
     其实上面说的构造代码块就是显示初始化的后面,之前是因为有super,但是没有父类对象,所以super执行完了就进行显示初始化.
     现在有了父类对象,所以先执行super,也就是父类构造函数执行完了,就进行显示初始化,然后再运行子类super后的语句.

5.所以,1super,2显示初始化,3构造代码块初始化

 

0 0
原创粉丝点击