JavaSe 0721
构造方法续讲
面向对象方法
static:静态的的,可以修饰成员变量,此变量就被这个类的所有对象共享 且共享变量只有一份,谁最后修改这个变量,最后输出什么变量
特点:随着类的加载而加载,即.class加载而加载
修饰的成员,优先于对象存在
被类的所有对象所共享
被静态所修饰的成员是属于类的,今已使用类名直接调用,可以使用对象名调用,但是不推荐
静态变量也称之为类变量
举例: 饮水机可以用静态修饰,共用 水杯
注意事项:
在静态方法里,不能调用非静态方法,静态修饰的成员是随着类的加载而加载的,优先于对象而存在的。先有的访问不到后有的 在静态方法里,调用不到非静态的成员。
在静态方法中,不能存在 this 关键字
对于入口 main方法中,不建议定义成员变量和成员方法
静态变量属于类,成员变量属于对象,也称之为实例变量
静态变量存在方法区的静态去,成员变量堆内存
静态变量随着类的加载而存在,成员变量随着对象创建而产生
静态变量可以使用对象名和类名调用,推荐使用类名,成员变量只能使用对象名调用。
提供 math的类
代码块:所谓代码块就是{}起来的
局部代码块、构造代码块,静态代码块,同步代码块
局部代码块:定义在方法内部,及早释放,利于内存利用率
构造代码块 定义在类中方法外的代码块
构造代码块每次创建对象时,都会执行且优先于局部代码块
静态代码块:定义在类中且被静态修饰符修饰,且优先于构造代码块,经常会做一些初始化
继承
继承:子类可以继承父类的成员(成员方法成员变量)
类和类形成继承关系,extends
public class ZI extends FU
继承的好处:提高代码复用性和维护性
继承的弊端:让类和类之间产生关系,增加耦合性
程序设计原则:高内聚,低耦合 一个类能独立完成某个功能,
继承的语法特点:Java只支持单继承,一个子类只能有一个父类
只能继承父类非私有的成员
构造方法不继承
继承就是把多个子类的共性部分向上抽出到父类中,以实现代码的复用性和维护性
再重复一次,当成员变量和局部变量重名时,变量访问原则遵循就近原则,先在局部范围找,如果在该类成员范围找不到,那么就去父类的成员范围找,找到就使用。
super 代表父类空间的标识,
super()访问父类的空参构造
super. 成员变量名,访问父类的成员的方法。
this 访问本类的成员变量
在每个类的构造方法中第一行有一行默认语句是 super() 会去调用父类的空参构造
Java继承体系中,顶层父类(祖宗类)是Object类,所有类都直接或简介继承自它
父类没有提供空参构造,则调用父类有参构造类型
方法重写:当子类出现了和父类一样的方法是,子类的方法会覆盖父类的方法,称之为方法重写。
用处:子类对父类的方法实现不是很满意,需要扩展或者覆盖父类的方法
举例:猫吃鱼狗吃骨头都是吃饭
重写注意事项:(1)父类私有方法不能继承和重写
(2)构造方法不参与重写
(3)子类在重写父类方法时,方法的权限修饰符不能比父类的低,可高可等
(4)静态方法不提供重写
final 字符:修饰基本类型,不可变量,常量名一般大写;
修饰引用类型,指的是地址值不能再次被改变
修饰方法,此方法不能被重写,只能继承
修饰类,此类不能被继承
多态
多态:指的是一种事物,在同一时刻表现的不同状态
举例:猫 是猫类,同时也可以说猫是一种动物
Cat cat=new cat() Ainmal an=new cat()
多态的前提,要有继承,没有继承多态久无从谈起
多态要有方法重写,父类引用指向子类引用
多态的形式来访问成员变量,编译看左边,运行看右边,多态的形式访问成员变量,访问的都是父类的变量。
多态的形式访问成员方法,编译看左边,运行看右边,访问成员方法,访问的是子类的方法
多态的好处:(1)提高代码的复用性,和维护性
(2)提高代码的扩展性
多态的弊端:(1)不能调用子类的特有功能
(2)向下转型来调用子类特有的功能,ZI zi=(zi)fu;把父类引用,向下转型为子类型
抽象类:抽取所有子类的共性,但不在父类中给出所有共性功能的具体表述 abstract 抽象类中语法特点:
(1)抽象类中介意没有抽象方法,也可以由抽象方法
(2)一个类中一旦有了抽象方法,此类就必须为抽象类
(3)抽象类不能实例化就是不能 new 出来,但是可以采用多态的形式间接实例化 举例:FU fu=new ZI();
(4)抽象类中的所有抽象方法强制子类必须重写
(5)抽象类中的子类有两种,一是重写抽象类中的所有子类
(6)设计的考虑在非抽象方法,可以让子类直接使用,对于抽象方法,强制要求重写
抽象类的成员方法特性:可以是常量,也可以是变量
抽象方法,强制要求子类重写
非抽象方法,继承父类,提高代码复用性
抽象类不能和哪些关键字共存
(1)private 冲突
(2)final 冲突
(3)static 不能共存 没有意义
接口
接口:为了定义一些额外扩展的功能,哪些事物想要具备这些功能,可以对该接口进行实现。接口不能进行实例化
关键字: interface 在接口中提供扩展功能,且不做具体实现(JDK1.7以前)
父接口指向子类对象,这也是多态。类中接口用implements 来表示
接口的子类有两种选择 重写接口中的所有抽象方法或者自己本身是个抽象类
接口成员的特点:(1)接口中的成员变量,全部是公共的静态常量,前面存在默认修饰符,可以直接用接口名调用
(2)JDK1.7接口中为抽象方法,不存在非抽象方法,方法的前面存在默认修饰符
(3)接口中没有构造方法
类与类,类与接口,接口与接口之间的关系:
(1)类和类之间是继承关系,且单继承
(2)类和接口之间是实现关系,implements 实现关系,并且可以多实现
(3)接口和接口之间可以是实现继承关系,支持多继承
注意:JDK1.8之后,接口的方法中修饰符加 default 就可以使用,也允许接口中可以定义静态方法
抽象类和接口的区别:抽象类中,可以定义抽象方法,也可以定义非抽象方法。
接口定义抽象方法,JDK1.8可以定义defalut 修饰的方法
抽象类有构造方法,接口没有构造方法
抽象类可以定义成员变量也可以定义常量,接口全市公共的景太常量
设计思想,抽象类抽象所有子类的共性功能,并不给出共性功能的具体实现,而是交给子类去实现
接口:体现一种扩展的思想,通常定义一些规范和规则,哪些事物想要扩展,可以实现具体接口,接口只需要维护一套规范,具体实现由一些子类去完成。
接口和抽象类在设计理念上,抽象类定义的是该继承类对的共性功能而接口中定义的是该继承体系的扩展功能