疯狂java讲义

封装:

  • 封装:将对象状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是用类所提供的方法访问和操作。
  • 访问控制符:private(当前类访问权) ,protected(子类访问),public(公共访问),default(包访问)
  • set(),get()
  • 构造器重载,名字相同 ,形参不同。
  • 构造器中调用另一个构造器用this();必须出现在构造器第一行。
  • 方法重载:名字相同,形参不同。与返回值,修饰符无关。

继承:

  • 继承:每个子类只有一个直接父类,extends。
  • 默认继承java.lang.Object,是所有类的父类。
  • 子类可以重写父类方法。方法重写。两同两小一大:方法名同,形参同,返回值小,异常小,子类访问权限大。
  • 子类覆盖后子类对象不可调用父类方法,但可在子类方法中调用,super(实例方法),父类类名(类方法)来调用。
  • 如果父类private,那方法对子类隐藏,子类无法调用,无法重写。
  • super:也可用来访问父类被覆盖的实例变量。
  • 会为所有实例变量分配内存。(被覆盖了也分配)
  • 子类也可以用super调用父类构造器。
  • 子类没有super调用父类构造器,系统会在执行子类构造器之前调用父类构造器。
  • 父类构造器在子类构造器之前进行,还会上溯,最先执行的总是java.lang.Object构造器。

继承注意点:子类可以访问父类成员变量和方法,不安全

  • 尽量隐藏父类内部数据,private
  • 不让子类随便访问,修改父类方法,不能访问private.如果希望访问不让重写,用final public,可以被子类重写不能被外部访问用protected.
  • 尽量不在父类构造器中调用被子类重写的方法。

多态:编译时类型和运行时类型不同,相同类型的变量调用同一个方法呈现多种不同行为特征。

  • 编译时类型:声明该变量时的类型。
  • 运行时类型:实际赋给该变量的对象。
  • 子类对象赋给父类引用变量——向上转型,系统自动完成。
  • 父类对象赋给子类引用变量——强制类型转换,instanceof判断更安全,否则ClassCastException
  • 最终类不能被继承:1.用final修饰类,2.用private修饰类的所有构造器,子类无法调用,就无法继承。
  • 组合复用。

初始化块:

  • 可有修饰符static。初始化块按顺序进行。
  • 创建对象时,先调用类里的初始化块再执行构造器。
  • 初始化块是构造器补充,在构造器前执行。
  • 但是不能接受任何参数,对所有对象初始化相同。

 

 

  • ==和equals:引用变量用==时,只有他们指向同一个对象才true。==两边没有父子关系的两个对象会编译错误。
  • “hello”直接量存在常量池,new String ("hello")Jvm会用常量池保存"hello",在调用String类构造器创建一个新对象,保存在堆内存中。所以不相等。
  • 值相等用str1.equals(str2);

 

 

  • 类成员,类方法,即使实例是Null也可以访问类成员,null访问实例成员会引发NullPointerException。
  • 静态初始化块也是类成员,类初始化时调用,之后不再执行,
  • 类成员不能访问实例变量。

 

  • 单例类:一个类只能创建一个实例。构造器private。提供一个public 方法作为访问点,用于创建对象,且是public static.且类还必须缓存已经创建的对象。用一个成员变量来保存曾创建的对象,要被静态方法访问,必须也static.
  • 只能创建一个对象,再多引用所指的都相等。
  • final:
  • 修饰变量,该变量一旦有初始值就不可改变,final修饰的成员变量必须显示指定初始值,系统不会对final成员隐形初始化,final修饰局部变量,修饰形参
  • final修饰引用变量,final保证指向的对象不变,但对象内容可以改变。
  • final修饰变量,宏定义,定义final时就为变量指定初始值,在编译时确定,final变量实际是宏变量。
  • 修饰方法,不可被子类重写。但可以被类内重载
  • 修饰类:不可以有子类,不可被继承、

 

  • 不可变类:创建该类实例后,该实例实例变量不可改变。
  • 规则:1.用private和final修饰该类成员变量   2.提供带参数构造器,传入参数来初始化。  3.只为该类成员提供getter().不能setter()

 抽象:

  • 抽象方法,抽象类:abstract。
  • 抽象方法不能有方法体,抽象类不能被实例化,不能new.这个类只能被继承。
  • 抽象方法没有方法体,必须被子类重写。
  • final与abstract不能同时用。static和abstract也不能同时修饰同个方法。
  • 抽象类只定义某些方法,把不能实现的部分抽象成抽象方法,留给子类实现。

 

posted @ 2019-02-27 16:33  旺仔流奶  阅读(444)  评论(0编辑  收藏  举报