A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迦南 中级黑马   /  2014-8-23 21:31  /  1802 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文



final关键字:
        final表示:最终的
        1.final可以修饰类、成员变量、成员方法;
                1).被final修饰的类,表示:最终类,不能被继承
                2).被final修饰的成员变量,表示:拥有最终值,只能被赋值1次,不能被修改,
                        final的非static的变量,可以先声明后赋值,但只能在构造方法中赋值,而且只能被赋值一次;
                        final的static的变量,必须要在声明时赋值;此值在运行时不允许修改;
                3).被final修饰的成员方法,表示:最终的方法,不能被重写;
        继承:
        1.为了增加代码复用,我们可以将现有的类中的属性和方法进行进一步抽取,形成一个"父类";
        2.其它类可以"继承"自这个类,使用关键字:extends.
        3.继承之后,子类将拥有可以被继承的成员变量和成员方法;
        继承的特点:
        1.java中只支持单继承,不支持多继承
        2.但是Java中允许"多级继承"
        注意:
        1.不要仅为了获取其他类中某个功能而去继承
        2.类与类之间要有所属( " is a " )关系,xx1是xx2的一种。
        类和类之间的关系:(UML)
        1.is a(是一个的关系):继承
        2.has a(有一个的关系):
                class 学生{
                }
                class 教师{
                }
                class 班级{
                        int 楼层;//自己的属性
                        String 门牌号;//自己的属性
                        学生[] stuArray = new 学生[80];//有学员
                        教师 tea = new 教师();//有教师
                }
        3.组合关系:
                class 硬盘{
                }
                class 主板{
                }
                ....
                class 电脑{//全部都是由其它类对象组成
                        硬盘 yp = new 硬盘();
                        主板 zb = new 主板();
                        ...
                }
        4.依赖关系:
                class 学生{
                }
                class 教师{
                }
                class 校长{//校长依赖于学生类和教师类,紧"耦合"
                        void 谈话(学生 stu){
                        }
                        void 谈话(教师 tea){
                        }
                }
子类的构造过程
        1.在构造一个子类对象之前,先构造一个父类对象
        2.子类不能继承父类的private的成员属性和成员方法,在子类中可以定义和父类相同的private的成员变量
          或成员方法,但是子类自己的;
        3.父类的构造方法是不能被继承的;
        4.当继承时,一定要仔细观察父类的构造器,我们的子类构造器一定要保证能够正确的调用父类的构造器;
          当父类没有默认构造器时,子类的构造器中可以调用父类构造器,使用super()关键字;

        this 和 super
        1.this 是存储本类当前对象的引用;
          super是存储父类对象的引用;
        2.当本类内部多个构造器之间,需要互相调用时,使用this(),放在第一句话
          当显示调用父类构造器时,使用super(),放在第一句话;
        3.this关键字:当"局部变量"覆盖"成员变量"时(局部变量同成员变量同名),显示调用成员变量,使用this.XXX=
          super关键字:当"子类的成员(变量、方法)"覆盖"父类的成员"时,在子类中可以访问父类的同名成员,使用super.XXX
        4.当父类没有默认构造器时,子类的构造器中可以调用父类构造器,使用super()关键字;
        方法的重写(Override)
        1.当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
        2.重写的规则:
                子类方法的:返回值类型、方法名、参数列表:必须完全相同;
                如果只有返回值类型、方法名:编译可以通过,此方法认为是子类自己的方法
                如果只有方法名、参数列表相同,返回值不同:编译错误.不能重写,要求返回值类型必须相同;
构造方法的特点及注意事项:
   1.方法名同类名相同;
   2.没有返回值类型,甚至是void;
   3.不能返回任何值;
   4.构造方法可以重载;
   5.构造方法可以接收参数;
   6.构造方法是自动执行,当实例化一个此类对象的时候;
   7.实例化一个对象的时候,只能执行一个构造方法;
   8.构造方法可以调用构造方法,使用this([参数]);
   9.构造方法可以被修饰为private(私有的);
注意:
   1.如果我们不指定构造方法的话,系统会自动为我们的类添加一个默认构造方法:无参、不做任何事情;
     如果我们指定了构造方法,那么系统将不再自动添加默认构造方法;
抽象类:
        当一个方法不需要定义方法体,可以只有方法声明,此时,这个方法就是一个抽象方法,
        抽象方法,使用关键字:使用abstract关键字修饰;
        一个类中如果有一个抽象方法,那么这个类必须也被声明为abstract(抽象类)
        一个类成为抽象类后,意味着:此类不能被实例化;就是用来被继承的;
        如果一个子类继承一个抽象类后,必须要重写父类的抽象方法。否则,子类也必须是抽象的;
        子类继承抽象类使用extends关键字,同样只能单继承;一个抽象类可以继承另一个抽象类
抽象类:
        1.抽象类中可以有抽象方法,可以有普通方法;也可以有普通的成员变量
        2.抽象类中可以不包含抽象方法;也可以什么都不包含;
        3.抽象类中有构造方法么?
                可以的。虽然抽象类不能被实例化,但抽象类可以包含构造方法,用来子类给
                成员变量赋值;
        4.抽象关键字abstract不可以和哪些关键字共存?
                1).private :因为一个abstract方法需要被重写,所以不能修饰为private;
                2).final:因为一个abstract方法需要被重写。被final修饰的方法是不能被重写的,所以不能同final共存;
                3).static:因为一个abstract方法没有方法体。静态方法需要对方法体执行内容分配空间,所以不能同static共存;
        5.抽象类中可不可以没有抽象方法?
                抽象类中可以什么都没有!!!
        模板模式:
        1.抽象类作为一个模板类;
        2.抽象类中要包含模板方法和基本方法;
        3.模板方法要调用基本方法;
        4.基本方法是抽象的,需要子类去实现;
单例模式:
        在整个引用程序运行周期,对于某个类的对象,只需要一个对象存在,
        此时可以将此类设为"单例模式";
        制作单例模式:
        1.将默认构造器私有化,外界不能实例化此类对象;
        2.声明一个私有的,静态的此类对象的引用,作为成员变量;
        3.声明一个公有的,静态的获取此类对象的方法;
                注意:单例,在此方法内控制;
多态:某一类事物的多种存在形态;
        1.一个父类的引用指向子类对象
多态的特点:
        1.当父类的引用指向子类对象时,访问被覆盖成员时,访问的是父类的;
          在调用被覆盖的方法时,调用的是"子类的"。方法是运行时动态绑定的;
        2.当父类的引用指向子类对象时,不能访问子类自有的成员;只能访问被覆盖的;
//类型自动向上转型:子类类型——>父类类型(自动转)
如果明确接收的子类类型,可以将父类变量强制转换为子类类型:向下转型:父类——>子类(强制转)
Student stu = (Student)obj;//传入的是Student类型OK的。如果传入的是Teacher类型: java.lang.ClassCastException(运行时)
                //可以使用instanceof关键字进行判断
                //双目运算符:判断左边的变量是否是右边的"类"类型。返回一个boolean值
Personnel p = new Teacher();//向上转型(自动)
                Teacher t = (Teacher)p;//向下转型(强制)
多态的应用:
        1.增加一个父类,让所有的人员继承自这个父类
        2.修改Master类,保留一个talk方法,接收参数改为:父类类型;
        3.一旦增加新人员时,只需继承自Personnel类,重写方法,Master类不需要修改;
接口:
        当我们抽取出抽象方法后,如果全部都是抽象方法,可以将此类定义为"接口"
        1.定义接口:使用关键字interface。没有class关键字
        2.接口同抽象类,都不能被实例化,使用来被继承的;
        3.一个类如果需要继承一个接口使用关键字:implements(实现)
        4.一个类如果实现一个接口,必须重写接口中定义的抽象方法,访问修饰符一定要等于或大于父类的访问修饰符;如果不全部实现,这个类就是一个抽象类;
        5.接口中可以定义成员变量、抽象方法:
          1).接口中定义的成员变量必须被声明为:public static final
             上述关键字可以不写,系统会自动添加;
          2).接口中定义的成员方法,必须被声明为:public abstract
                 上述关键字可以不写,系统会自动添加;       
作为功能扩展:
                1.在Java中不允许多继承,但允许同时实现多个接口。相同的方法都只是定义,没有方法体
                  所以不会产生冲突;
                2.一个接口可以"继承"另一个接口,使用关键字:extends,而且可以多继承
i
接口和抽象类:

相同点:
1.都不能被实例化,都是用来被继承的;

不同点:
1.抽象类:抽象类中可以有实现的方法和抽象的方法;
  接口:  接口中只能包含抽象方法;
2.抽象类:抽象类使用关键字abstract class定义
  接口:  接口使用关键字interface 定义
3.抽象类:子类继承抽象类使用关键字:extends,只能单继承
  接口:  实现类实现接口使用关键字:implements,可以多实现;
4.抽象类:成员变量可以是普通的成员变量;
  接口:  成员变量必须被修饰为:public static final
5.抽象类:抽象类中可以有构造方法;
  接口:  没有构造器;


评分

参与人数 1黑马币 +5 收起 理由
天黑偷牛 + 5 赞一个!

查看全部评分

12 个回复

倒序浏览
笔记记得很好呀
回复 使用道具 举报
楼主可以教一下我么?求大师
回复 使用道具 举报
不错的,蛮详细
回复 使用道具 举报
看看,学习学习
回复 使用道具 举报

怎么每次都看到你。。。。
回复 使用道具 举报
shen7518 发表于 2014-8-27 17:19
怎么每次都看到你。。。。

咱俩有缘啊:handshake:D;P
回复 使用道具 举报
复制一下
回复 使用道具 举报
urwhat 中级黑马 2014-8-27 18:02:54
9#
ctrl c   ctrl  v
回复 使用道具 举报
学习下。。。
回复 使用道具 举报
总结的很好学习了
回复 使用道具 举报
好详细。
回复 使用道具 举报
向楼主学学
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马