封装
-
该露的露,该藏的藏
- 我们程序设计要追求“高内聚,低耦合”。
- 高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅暴露少量的方法给外部使用。
-
封装(数据的隐藏)
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
-
记住这句话就够了:属性私有, get/set
//类 private :私有
public class Student {
//属性私有
private String name;//名字
private int id;//学号
private char sex;//性别
private int age;
//提供弄个一些可以操作这个属性的方法!
//提供一些public 的get、set方法
public String getName(){
return this.name;
}
//set 给这个数据设置值
public void setName(String name){
this.name = name;
}
//alt + insert
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 120){
System.out.println("您真是高龄");
}else if(age < 0){
System.out.println("还没出生呢");
}else {
this.age = age;
}
}
}
import com.opp01.demon04.Student;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
//用了private后 不能直接s1.name =
//需要使用方法才能调用
String name = s1.getName();
s1.setName("6666");
System.out.println(s1.getName());
//s1.getName().sout 可以直接打印
s1.setAge(60);
System.out.println(s1.getAge());
}
}
继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
extends的意思是“扩展”。子类是父类的扩展。
-
JAVA中类只有单继承, 没有多继承!
- 一个儿子只有一个爸爸,一个爸爸能有多个儿子
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
继承关系的俩个类, 一个为子类(派生类) , 一个为父类(基类) 。子类继承父类, 使用关键字extends来表示。
-
子类和父类之间, 从意义上讲应该具有"is a"的关系
//在java中,所有的类,都默认直接或者间接继承Object
//Person 人 :父类
//子类继承了父类,就会拥有父类的全部方法!
public class Person {
//继承前提是用public
//protected
//default
//private 私有的不能继承
public int money = 10_0000_0000;
public void say(){
System.out.println("仰天一笑");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
//学生 is 人 子类,派生类
public class Student extends Person {
}
//老师 is 人
public class Teacher extends Person{
}
object类
- 在java中,所有的类,都默认直接或者间接继承Object
super
-
super注意点:
- 1.super调用父类的构造方法, 必须在构造方法的第一个(行)
- 2.super必须只能出现在子类的方法或者构造方法中!
- 3.super和this不能同时调用构造方法!
-
Vs this:
-
代表的对象不同:
-
this:本身调用者这个对象
- super:代表父类对象的应用
-
前提
- this:没有继承也可以使用
- super:只能在继承条件才可以使用
-
构造方法
- this() :本类的构造
- super() :父类的构造
-
public class Person {
//如果父类定义了有参构造器,就必需重新定义一个无参构造器,否则子类只能够调用有差,无参就调用不了了
public Person() {
System.out.println("父类的无参执行了");
}
protected String name ="父类";
public void print(){
System.out.println("父类方法");
}
}
public class Student extends Person {
//隐藏代码:调用了父类的无参构造
//super(); ---调用父类的构造器必需在子类构造器的第一行,不然会报错
//this也一样,和super只能用一个,第一行
public Student() {
System.out.println("子类的无参执行了");
}
private String name = "子类";
public void print(){
System.out.println("子类方法");
}
public void test1(){
print(); //子类方法
this.print();//子类方法
super.print();//父类方法
}
public void test(String name){
System.out.println(name);//主方法
System.out.println(this.name);//子类
System.out.println(super.name);//父类
}
}