一、封装
-
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的 读取和修改 的访问级别。
-
写代码时只需要做到属性私有,get/set。
即对象的属性用private来进行修饰,当需要对其进行访问时用get方法,需要修改时用set方法来修改。
如:
public class Student{
//属性私有
private String name; //姓名
private int id; //学号
private char sex; //性别
}
//提供一些可以操纵这些属性的方法 快捷键ctl + Enter 如:
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
调用时
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("阿文");
}
二、继承
- 什么是继承
- 继承是一种类与类之间的关系
- 即子类能够获得父类的 公开属性 和 公开方法
- 继承的本质是对同一类的抽象,比如学生类和老师类都可以抽象为Person类
- 子类继承父类,使用用extends关键字
- Java中的所有类都直接或间接的继承Object类
- Object类是Java中的一个特殊的类,是所有类的超级父类;
- Object类中的大部分方法都是native方法,方法是在JVM源码层实现的,效率很高。
-
Java中类只支持单继承(一个父类可以有多个子类,一个子类只能有一个父类)
//后续学到接口再来补充接口间接实现多继承的知识点 -
Super
- super只能在存在继承关系的类里使用,用于子类访问父类中的属性和方法
- super的使用一般分为三种
-
直接引用:即super.×××直接饮用父类的成员
-
其实也算是一种直接引用。只不过是子类引用父类中和子类同名的属性或方法
如:
//子类
public class Student{
private String name = "全辣柯基"; //和父类同名的属性name
//和父类同名的方法print
public void print(){
System.out.println("A");
}
public void test(){
print(); //输出A
this.print(); //输出A
super.print(); //输出B
System.out.println(this.name); //输出 全辣柯基
System.out.println(super.name); //输出 全辣鲤鱼
}
}
//父类
public class Person{
private String name = "全辣鲤鱼"; //姓名
public void print(){
System.out.println("B");
}
}
\
- 引用父类的构造方法
//父类
public class Person{
public Person(){
System.out.println("父类的无参构造执行了");
}
}
//子类
public class Student{
public Student(){
System.out.println("子类的无参构造执行了");
}
}
//测试代码
public static void main(String[] args) {
Student s = new Student();
}
测试代码的运行结果会输出
- 父类的无参构造执行了
- 子类的无参构造执行了
也就是说,子类对象实例化时会自动调用父类的构造方法。
需要注意的点:
- 上述例子使用的是默认的无参构造,也可显式定义含参构造方法。
- 在子类的构造方法中使用super()调用父类的构造方法,必须写在方法的代码的第一行
- super如果出现,一定只出现在子类的普通方法或构造方法内部的代码中!
- this和super不能同时出现在同一个构造方法中。
- this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。
- 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。