本文共 3909 字,大约阅读时间需要 13 分钟。
一、继承
(一)概述
1、让类和类之间产生联系,子父的关系
2、实现继承:使用关键字:extends,含义:继承、增加、扩展
3、父类:被继承的类,别称:根类,基类,超类
4、子类:用于继承的类,别称:派生类
5、格式
class 父类 {}
class 子类 extends 父类 {}
(二)好处和弊端
1、好处
(1)提高了代码的可维护性
(2)提高了代码的复用性
2、弊端
(1)提高了代码的耦合性(耦合度)
(2)耦合度:代码与代码之间的关联的紧密程度
3、开发的原则:高内聚、低耦合、代码复用性高
(三)注意事项
1、私有成员不能被继承
(1)父类当中的私有成员,不能在子类中直接使用
(2)其实在子类对象中,仍然包含父类私有的成员变量,只不过在父类中不能直接访问父类的私
有成员变量
(3)但是set、get方法是一般的成员方法,可以被继承,我们可以通过继承而来的set、get方法操
作子类的成员变量
2、父类中的构造方法不能被继承
原因:从格式上讲,父类构造方法的方法名是父类类名,子类继承下来也无法使用
解决方式:可以通过子类构造访问父类构造,父类构造再去访问父类中私有的成员变量,从而达成
间接访问
3、继承的设计:要符合子类 is a 父类的逻辑。子类是父类的一种
(1)程序员类:姓名、年龄、工号、工资;方法:工作
(2)项目经理类:姓名、年龄、工号、工资、奖金;方法:工作
(3)父类中放的是所有子类的共性,子类中除了继承来的共性,还具有个性
(四)继承的特点
1、Java中支持单继承、多层继承;不支持多继承
(1)单继承:一个子类只能继承一个父类(亲爹)
(2)多层继承:A继承B,B继承C
(3)多继承:一个子类不能同时继承多个父类
2、不支持多继承的原因
假设一个类能够同时继承两个父类的时候,这两个父类中具有相同的方法,如果子类在使用的时
候,就不知道到底使用的是哪一个类的方法
(五)继承中成员变量的关系
1、在子类中,如果没有定义重名的变量,子类就可以直接使用父类中继承来的变量
2、如果子父类中有重名的变量,子类对象就只使用子类成员变量,不会使用父类成员变量
3、当子父类中定义了重名的成员变量时,按照就近原则访问:先从子类中去寻找,如果找不到就
继续寻找父类,父类如果找不到就一直往上找,直到找到Object类,还是找不到就会报错
4、Object类,是官方提供的一个类型,是所有类型的顶层父类,如果随意定义一个类型,没有明
确说明继承哪个类,就默认继承Object类
(六)this和super详解
1、this关键字:指代当前类型当前对象的引用
2、super关键字:指代当前对象父类的引用
(七)this和super总结
1、可以访问的内容
(1)可以访问成员变量
this.变量名
super.变量名
(2)可以访问成员方法
this.方法名
super.方法名
2、this和super都可以访问构造方法
(1)this();访问本类中的其它方法
(2)super();访问父类的指定构造【看参数是否对应】
3、总结:子类访问父类私有成员变量赋值的方式
(1)子类继承父类中私有成员变量对应的set、get方法;通过set、get方法进行赋值取值(间接
性)
(2)子类对象在创建的过程中,调用子类的构造方法,子类自己的构造方法通过super语句访问父
类的构造方法,父类的构造方法再去访问父类私有的成员变量,然后赋值
(八)继承中构造方法的总结
1、要创建子类对象,首先要将父类部分的数据准备好,此时我们使用的手段是通过super语句访问
父类构造,父类构造对成员变量初始化,之后在创建子类对象
2、super或者this语句必须写在构造方法的第一行:
原因:使用子类数据前,首先要将父类部分的数据准备好,super语句是用于给父类数据进行初始
化的代码,如果不写在第一行,就有可能出现要是用父类数据但是还没有上准备好的情况
3、构造方法中,如果没有手动提供任何的this或者super语句,编译的时候系统会自动为我们在构
造方法的第一行默认加上一个空参的super();
4、this语句和super语句可以放在普通方法中吗?不行!因为构造方法需要自动调用,放在普通方
法中就变成了手动调用
(九)继承中成员方法的关系
1、在子父类中,出现了不同名的方法:子类对象调用方法的时候,子类中有就执行子类的方法,
父类中就执行父类中的方法
2、子父类中,出现了同名的方法:子类对象调用方法时,只会执行子类的方法
3、结合2中的现象,我们一般需要在子类中对父类方法体修改的时候,就按照这样的操做进行
4、3中的操作,叫做方法的重写
(1)重写:Override,覆写,覆盖;在子类中使用新的方法体覆盖父类旧的方法体
(2)重载:在同一个类中,方法名称相同,参数列表不同,与返回值类型无关;参数列表不同分
为:个数不同、顺序不同、类型不同
(3)重写:在子父类中,方法名称相同,参数列表相同,与返回值类型有关
(4)注解:@Override。可以专门使用重写的语法规则对一个方法进行检测
5、与返回值类型有关:
(1)重写的方法返回值类型可以保持一致
(2)也可以是:子类方法返回值类型是父类方法返回值类型的子类,关系不能颠倒,更不能是无关类
6、注意事项
(1)重写的方法权限要么不变,要么越来越大
(2)私有方法不能被重写
(3)静态方法不能被重写
二、抽象
(一)抽象方法
1、抽象:抽取相似的、相同的代码部分
2、抽象方法:只有方法的声明,没有方法的实现,额外在方法的声明上加上abstract关键字
(二)抽象类
1、概述:可以定义抽象方法的类
2、定义格式
abstract class 类名 { }
(三)抽象类的特点
1、抽象类和抽象方法都必须使用abstract进行修饰
(1)抽象类:abstract class 类名 {}
(2)抽象方法:public abstract void 方法名(参数列表);
2、抽象类和抽象方法的关系
(1)抽象方法必须放在抽象类中
(2)抽象类中未必都是抽象方法
3、抽象类不能创建对象
4、用途
(1)虽然抽象类不能创建对象,但是抽象类的子类可以创建对象,抽象类可以被继承,子类创建
对象实现抽象方法,调用方法即可
(2)如果子类还是无法实现抽象方法,那么这个类就是一个抽象类,还需要继续往下让子类实现
它;就可以创建对象调用方法
(四)抽象类成员的特点
1、成员变量:可以有,子类最终是一个非抽象类,所以成员变量用于给子类继承
2、构造方法:有
(1)虽然抽象类无法创建对象,但是抽象类需要被子类实现,并且抽象类具有成员变量,成员变量需要赋值
(2)子类可以创建对象,子类构造访问父类构造,父类构造用于赋值
3、成员方法:有
(1)可以是抽象方法,也可以是非抽象方法
(2)非抽象方法子类可以直接继承使用,抽象方法子类需要进行重写
三、代码块
(一)概述
1、使用大括号将一段代码包围起来,根据书写的位置不同,具有不同的名称,不同的作用,以及
不同的执行时机
2、分类
(1)局部代码块
(2)构造代码块
(3)静态代码块
(4)同步代码块【多线程】
(二)局部代码块
1、格式:任意一段代码使用大括号包围起来
2、位置:在方法中
3、作用:限定变量的生命周期
(三)构造代码块
1、格式:任意一段代码使用大括号包围起来
2、位置:类成员位置
3、作用:用于执行所有构造方法中共性的内容,或者给成员变量赋值
4、执行时机:在对象创建的过程中,由JVM自动调用,针对每一个对象有且仅有一次调用机会,
如果仅仅是类加载了,但是没有创建对象,构造代码块是不会执行的
5、赋值顺序:默认初始化 > 显示初始化 > 构造代码块赋值 > 构造方法赋值
(四)静态代码块
1、格式
static {
代码块;
}
2、类成员位置
3、执行特点
(1)随着类的加载而执行
(2)类只加载一次,静态代码块也只执行一次
(3)在最初执行,早于所有对象的相关内容
4、作用
(1)给静态成员变量赋值
(2)用于执行哪些必须在最初执行且执行一次的代码,比如:加载配置文件、加载驱动
四、Date类
1、该类的对象用于表示一个特定的瞬间,毫秒值。
2、构造方法
(1)Date():表示创建对象那一刹那的毫秒值
(2)Date(long date):表示传入毫秒值的时间,是从1970年1月1日0时0分0秒开始计算
3、常用方法
(1)getTime():获取当前时间的毫秒值
(2)setTime(long time):将调用者对象的毫秒值设置为指定值
五、DateFormat类
1、直接打印Date的结果,不方便阅读,我们想要根据自己的需求进行打印,就需用到当前类
2、DateFormat是一个抽象类,无法创建对象,只能让子类去实现它创建对象
3、常用方法
(1)format(Date date):将参数对象,格式化为一定的日期格式
(2)parse(String source):将参数字符串转为Date类型
六、SimpleDateFormat
(一)使用
1、SimpleDateFormat是DateFormat的子类,可以创建对象调用方法
2、构造方法
(1)SimpleDateFormat():使用默认的格式进行打印
(2)SimpleDateFormat(String pattern):使用指定的格式进行打印
转载地址:http://evqcuy.baihongyu.com/