封装和继承
面向对象的三大特性:
- 封装
- 继承
- 多态WW
1. 掌握封装的使用
1.1 封装的作用
**封装:**类和对象章节 当时学到的是半成品的封装。学会发现类,发现类的属性、类的行为。
**另外一半的封装概念:**将一些不安全的信息进行封装(保护),然后将可以直接被我们使用的部分开放出来(接口)。(提升安全性和可用性,有面向接口编程的思想)
使用步骤: 未来这些类组件都应该采用封装来进行信息保护
- 属性私有化(private)
- 提供公共的getter(getXX())和setter(setXX())方法
- 根据需求在setter和getter方法中添加逻辑判断
1.2 一般JavaBean的规范
JavaBean:其实指的就是我们那些对象类。
- 属性私有化
- 提供公共的getter和setter方法
- 提供无参构造
- 实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)
1.3 封装的优势
我们未来开发的系统应该非常接近于 高内聚、松耦合(低耦合)。
1. 便于使用者正确使用系统,防止错误修改属性。简单说就是安全 前面属性的例子 自动提款机(钱放在那里,用户自己存钱取钱 自己改存折上的数据不行 取款机要点钱)
2. 有助于系统之间的松耦合(低耦合),提高系统独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响其他的系统,例如:我修改了属性名,如果没有封装,我需要修改程序中不同类n处使用到这属性名的地方,而用了封装,我只需要修改好当前这个类里面向外部提供的方法(接口API)就可以了,因为外部只是在使用我这个方法名而已。
3. **提高软件的可重用性。**每个系统都是一个相对独立的整体,可以再多种环境中得到重用。如干电池在相机、手电筒、剃须刀都能使用。
4. 降低了构建大型系统的风险。即使整个系统不成功,个别的独立子系统有可能依然有价值,比如相机损坏了,但电池依然有用,可以安装在手电筒中。
2. 掌握包组织结构
2.1 包的作用
package:从第二章节就开始创建了
它的作用就是用于对源代码进行分包管理,方便我们开发和阅读,另外也在一定程度上解决了同一个文件夹下无法出现同名文件。
规范: 要求包名全部小写
公司域名的倒序 + 应用程序名 +[部门名称]+[功能模块]
开发的:Tim:com.tencent.tim.xxx
Android应用 将包作为了一种区分不同应用程序的一个要素。
另外还依靠于签名。
2.2 导包
在我们使用类的时候:(一个类使用另一个类)
-
如果是在同一个包中使用某个类,那么直接可以进行使用。
-
如果是在不同的包中使用某个类,必须先进行导包(import)。
-
如果使用的是java.lang包下的内容的话,不需要导包。例如:System、Math… (这是JVM自动导入)
例如: import java.util.Scanner; // 导包 因为不在一个包中 JVM也不知道从哪去找你要的这个类 public class Test{ public void method(){ Scanner input = new Scanner(); input.nextInt(); } }
包声明语法(必须出现在文件中的第一行有效代码):package 包地址;
导包的语法(必须出现在类声明上方,包声明下方):import 类的全限定名/全类名;
例如:java.util.Scanner;
如果需要用到java.util包中的很多内容:那么可以直接`import java.util.*;`
快捷键:Ctrl+Shift+O
3. 掌握Java中的访问权限修饰符[访问级别]
访问修饰符:在类的语法和方法的语法上
访问修饰符不仅可以修饰属性、也可以修饰方法、还可以修饰类。
private
[package/default]
当你不写访问修饰符时 代表的就是包级别的访问protected
public
作用域 修饰符 | 同一个类中 | 同一个包中 | 子类中 | 任何地方(同一个项目) |
---|---|---|---|---|
private | √ | |||
默认修饰符 | √ | √ | ||
protected(了解) | √ | √ | √ | |
public | √ | √ | √ | √ |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRJyQ3zq-1570512485664)(封装和继承.assets/1569553225589.png)]
在一个类文件中,被public修饰的类的名称必须和文件名相同。
一般情况下不会在一个类文件中定义多个类。
public class Person {
private String name;
int age;
public double weight;
protected String gender;
public void method1() {
System.out.println(name);
System.out.println(age);
System.out.println(weight);
}
}
class HeHe{
}
class HoHo{
}
4. 掌握static关键字[有难度]
static
:如果被它修饰的方法,在调用非static修饰的方法时,必须先创建对象才能使用。
static表示静态的,被它修饰的信息要和JVM运行时数据区-方法区打交道。
它可以修饰:
-
类
-
属性:类属性/类变量/静态变量 可以通过类名直接调用
-
方法:类方法/静态方法 可以通过类名直接调用
-
代码块:静态代码块
为了在某种时机下执行的一段代码而已。
静态代码块只执行一次,在类加载的时候执行。
构造代码块会随着对象创建而执行,优先于构造方法执行。
public class Dog { public Dog(){ System.out.println("构造方法执行了!"); } // 代码块/成员代码块/构造代码块/非静态代码块 { System.out.println("构造代码块执行了!"); } // 静态代码块 static { System.out.println("静态代码块执行了!"); } }
public class Test{
public static void main(String[] args){
Test test = new Test();
test.method1();
}
public void method1(){
}
}
注意事项:
-
static修饰的信息都是属于类的信息,它们会随着类的加载而进行初始化。
int num; public static void method1(){ sout(num); //同下 //method2(); //因为当method1()加载时 method2还未初始化 所以我们才会先创建对象再去使用 } public void method2(){ method1(); // method1已经在类加载的时候 加载完了 所以可以正常使用 }
-
static修饰的信息是可以被类的所有对象共享的。