Java面向对象——封装和继承
面向对象的三大特性:
- 封装
- 继承
- 多态
1掌握封装的使用
1.1封装的作用
封装: 类和对象章节 当时学到的是半成品的封装。学会发现类,发现类的属性、累的行为
另外一般的封装概念: 将一些不安全的信息进行封装(保护),然后将可以直接被我们使用的部分开放出来(提升安全性和可用性,有面向接口编程的思想)
使用步骤: 未来这些类组件都应该采用封装来进行信息保护
- 属性私有化(private)
- 提供公共的 getter() 和 setter() 方法
- 根据需求在set() 和 get() 方法中添加逻辑判断
1.2 一般JavaBean的规范
JavaBean: 其实就是指的我们那些对象类
-
属性私有化
-
提供公共的get() Set() 方法
-
提供无参构造
-
实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)
1.3封装的优势
我们未来开发的系统应该非常接近于 高内聚、松耦合。
可能面试题 :你对封装的理解下面这些 在加上你的感受
- 便于使用者正确使用系统,防止错误修改属性 。简单来说就是比较安全
- 有助于系统之间的低耦合(松耦合),提高系统的独立性。保证系统某一个实现发生变化时,只要他的家口不变,就不会影响其他的系统
- 提高软件的可重(chong)用性。每个功能的实现都是一个相对独立的整体,可以再多种情况下得到重(chong)用。
- 降低了构建大型系统 项目的风险。即使整个系统没有成功,但是个别独立的子系统可以能依然有价值
Interget.valueof(属性)
将String类型修改为int类型
2.掌握包组织结构
2.1 包的作用
package:包 从第二章就开始创建了
他的作用就是用于对源代码进行分包管理,方便我们开发和阅读,另外也一定程度上解决了同一包下无法出现同名文件
规范:要求包名全部小写
- 公司域名的倒序+ 应用程序名 +【可选】部门名称 +功能模块
- 假设:
- 腾讯:www.tencent.com ->com.tencent.xx
- 开发的 Tim :com.tencent.tim.xxx
- Android 应用将包作为了一种区分不同应用程序的一个要素,另外还依靠与签名
2.2导包
在我们使用类的时候(一个类使用另一个类)
- 如果实在同一个包中使用某个类,那么可以直接进行使用
- 如果是在不同的包中使用某个类,必须先进行导包(import)
- 如果使用的是java.lang包下的内容的话,需要导包例如:System、 Math…(这是JVM自动导入的)
例如:
import java.util.Scanner; // 导包 因为不在一个包中 JVM也不知道去哪里找到这个类
public class Test(){
Scanner input =new Scanner();
}
包声明语法(必须出现在文件中的第一行有效代码)package 包地址
导包的语法:必须出现在类声明上方 包声明下方 import 类的全限定名;
例如java.util.Scanner ;
如果需要用到java.util包中的很多内容:那么可以直接 import java.util.*
3.掌握Java中的访问权限修饰符
访问修饰符:在累的语法和方法的语法上(访问级别由小到大)
访问修饰符不仅可以修饰属性还可以修饰类 、修饰方法
pricate
: 被这个修饰的属性或方法 表示只能在当前类使用[package/default]
:当你不写访问修饰符是 代表的就是包级别的访问protected
public
在一个类文件中,被public修饰的类的名称必须和文件名相同
一般情况下不会再一个类文件中定义多个类
4.掌握static关键字[有难度]
static
:如果被它修饰的方法,在调用非static修饰的方法时,必须先创建对象才能使用
static 表示静态的 ,被它修饰的信息要和JVM运行时数据区中的方法区打交道。
它可以修饰:
- 类
- 属性: 类属性/类变量/静态变量 可以通过类名直接调用
- 方法: 类方法/静态方法 可以通过类名直接调用
- 代码块: 静态代码块 创建对象时 先加载代码块 在加载构造方法
- 我了在某种时机下自行的一段代码
- 静态代码块只执行一次 ,在类加载是执行
- 构造代码块会随着对象穿件而执行,优先于构造方法
public class Test(){
public static void main(String[] args){
Test test = new Test();
test.meth();
}
public void meth(){
}
}
注意事项:
-
static修饰的信息都是属于类的信息 它们户会随着类的加载而进行初始化
public static void method1(){ // method2(); //错误 因为当 1 加载时 2还未初始化所以我们才会先创建对象在去使用 } public void method2(){ 1(); // 1 已经在类加载 的时候 加载完了 所以可以正常使用 }
-
static修饰信息是可以被类的所有对象共享的