Java基础
面向对象三大特征
一:封装
1.概念:
将数据和基于数据的操作封装在一起。
2.好处:
重点:将数据保存在内部;
目的:将类使用者和类设计者分开。
3.应用在代码中。
- 在定义变量和成员方法是要秉持授予最小访问权限的原则。
- 若成员变量被“pirvate”定义,要考虑提供对应得public get,public set方法。
好处:可以修改private成员变量;完成对成员变量访问的读写分离;可以在修改值时进行检查,拒绝错误修改
4.访问权限修饰符
在Java中,一切事物都有访问权限,在语言层面是由访问权限修饰符实现。
在声明的类体中 / 同包的其他类的类体中 / 不同包(在import情况下)
public
protected
默认(包权限)
private(最小访问权限)
成员变量,成员方法(类中成员)
针对对于其他类的可见性(类能不能使用)。
public:
在类体中:可以直接访问,可以创造对象进行访问。
在同包其他类中:可以通过创造对象进行访问。
不同包的类中:同上。
三种情况都能访问。
protected:
在类体中:可以直接访问,可以创造对象进行访问。
在同包其他类中:可以通过创造对象进行访问。
不同包的类中:
分两种情况:
在非同包的子类中,可以直接访问父类的protected修饰的成员。
在非同包的子类中,创建该子类对象访问父类中的protected修饰的成员。
其他情况不能访问。(特别注意在跨包子类中创建父类对象,并不能访问protected类变量)
默认(缺省):
在类体中:可以直接访问,可以创造对象进行访问。
在同包其他类中:可以通过创造对象进行访问。
不同包中不能访问。
private:
在类体中:可以直接访问,可以创造对象进行访问。
其他都不能访问。
类
针对对于外部的使用者的可见性(能不能用这个类)
public:
同一包中可以访问到。
不同包中可以访问到。
默认:
在同一包中可以创建类对象。
不同包中不能创建类对象和继承。
控制修饰符的好处
从代码的使用者来讲:可以快速忽略不该碰触的“private”方法。
从coder的角度来讲:可以防止自己的代码被别人广泛使用,从而免费帮别人维护。同时可以安全得实现细节。
二.继承
概念:
java的一种复用机制,防止代码产生冗余。
表示一种从属关系。is-a的关系:
从数据类型看可以把子类类型当做父类类型。因为子类拥有父类的所有数据和基于这些数据的操作。
语法:class A extends B {}
被继承的类叫做父类(基类,超类)
继承其他类的类叫子类(派生类)
子类通过继承机制,可以拥有父类的“所有成员”。
优缺点:
优点:
- 代码复用;
- 便于维护;减少代码冗余;
- 弱化了Java语言的类型约束(父类类型引用指向子类对象)
缺点:
父类修改后,会反应在所有的子类中,我们无法选择父类中的修改应该反应在哪些子类中。
单重继承:
extend后面只能跟一个类名。
但这不意味着一个类只能继承另外一个类的类成员。而是可以继承该类和该类的所有祖先类。
注意事项:
- 子类只能访问父类的所有非私有成员。
- 子类不能继承父类的构造方法。
子类对象的初始化:
子类对象中,有两部分数据构成,一部分是父类中声明的变量,一部分是子类中自己定义的成员变量的值。初始化过程中,需要先初始化父类中的变量,再初始化子类中的变量,因为避免一些子类中的变量初始化需要用到父类变量的情况。
实现条件:保证父类的构造方法执行在子类之前。
隐式初始化
由JVM完成。
条件:
- 父类中存在默认的构造方法。
- 子类中没有显示地调用父类的其他构造方法。
- 则在子类构造方法执行前,会自动调用父类的默认构造方法。
显式初始化
由我们自己编写。
- 在子类构造方法中通过super()的方式调用父类构造方法。
- super语句必须在子类构造方法的第一句位置。
- 若父类没有默认构造方法,则在子类构造方法的第一句位置通过super(实参列表)调用某个构造方法。
- super和this在构造方法中不共存,因为都需要放在第一句的位置。
super关键字
super代表父类的引用。可以类比this。