Java学习总结

隐藏和封装

理解封装

是面向对象的三大特征之一,指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

封装的目的

  1. 隐藏类的实现细节
  2. 防止非法访问
  3. 进行数据检查,有利于保证对象信息的完整性
  4. 便于修改,提高代码的可维护性

控制符

private---->default---->protected----public
访问控制级别由小到大
private(当前类访问权限)、default(包访问权限、不加修饰符时系统默认为default)、protected(子类访问权限、可不在一个包中)、public(公共访问权限)
其中只有public、default能用来修饰外部类
源文件中不使用public修饰类,则任何合法文件名都可以,如果一个Java源文件中定义了一个public类,文件名需要和被public修饰的类名一样
如果一个Java类的每个实例变量都被private修饰,并为每个实例变量都提供了public修饰的setter(写)和getter(读)方法,那么这个类就是一个符合JavaBean规范的类

package

本质上是文件夹,用于对类做规划,同一个包下的类可以自由访问

package packageName;//必须位于非注释的第一行

一个源文件只能定义一个包,即只能含有一条package语句,该源文件中可以含有多个类,这些类都包含在这个包下,同一个包下的类可以自由访问

子包和父包存在某种逻辑关系,但在用法上不存在任何关系

import

可以向某个Java文件中导入指定包层次下某个类或全部类(.*),位于package语句后,类定义之前,可以有多条导入语句
指定包层次下的全部类时会降低编译速度,但不会降低运行速度
使用import导入包层次下的类后,在源文件中使用时可以省略包前缀,不需要写类全名

import package.subpackage...ClassName;//ClassName是类名,导入全部类,将类名换成*

import static

静态导入,导入指定类的某个静态成员变量、方法或全部静态成员变量、方法
使用import导入可以省略写包名,而使用import static则连类名都可以省略
Java默认为所有源文件导入java.lang包下的所有类

方法重载和构造器重载

同一个类里具有多个方法(构造器),多个方法(构造器)的形参列表不同,被称为方法(构造器)重载

如果系统中包含了多个构造器,其中一个构造器的执行体里完全包含另一个构造器的执行体,对于这种完全包含情况,如果是两个方法之间存在这种关系,则可在一个方法中直接调用另一个方法,构造器则要用this(),程序会根据this()里的形参自己判断调用哪个构造器且必须位于第一行
当实例变量与(方法)构造器中的变量相同时,需要用到this.变量名

继承

方便代码的复用,是面向对象的三大特征之一

通过extends关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有的也称其为基类、超类。

父类和子类的关系,是一种一般和特殊的关系,因此父类包含的范围总比子类包含的范围要大,可以认为父类是大类,子类是小类

子类只能从被拓展的父类获得成员变量、方法和内部类(包括内部接口、枚举),不能获得构造器和初始化块

Java中类只有单继承,即只有一个直接父类,可以有多个间接父类,但是接口可以多继承

如果定义一个Java类时没有用extends关键字显式指出这个类的直接父类,则这个类默认扩展java.lang.Object类

修饰符 class SubClass extends SuperClass
{
       类定义部分
}

重写父类的方法

子类包含于父类同名方法的现象被称为方法重写,也被称为方法覆盖

需要遵循原则
“两同两小一大”
”两同“:方法名相同、形参列表相同
“两小”:子类方法返回值类型要小于等于父类方法返回值类型,子类方法声明抛出的异常类应比父类小或等于
“一大”:子类方法的访问权限应比父类方法的访问权限更大或相等
覆盖方法和被覆盖方法都只能是实例方法,不能一个是类方法,一个是实例方法,都为类方法叫隐藏
在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的是类方法)作为调用者来调用父类中被覆盖的方法
父类方法和子类方法直接也可以形成方法重载,子类定义一个与父类方法有相同的方法名,但参数列表不同的方法

super限定

如果需要在子类方法中调用父类被覆盖的实例方法,可以使用super限定来调用父类被覆盖的实例方法

super.方法名;

与this用法相似,也不能出现在static修饰的方法中
在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,而不是该类自己定义的实例变量

调用父类构造器

在子类里调用父类构造器使用super,方法类似于构造器的重载
调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行
最先执行的是java.lang.Object类的构造器,即java.lang.Object类是所有类的祖宗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值