封装
实现高内聚,低耦合,内部数据的操作细节自己完成,不允许外部干涉,仅暴露少量的方法给外部使用,get/set方法
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 提高系统可维护性
继承
- 子类继承父类,子类中的无参构造方法默认调用父类的无参构造方法,使用super()执行,而且必须写在第一行中(默认调用)
- 如果调用构造器本身,使用this()方法来调用,必须写在第一行中,所以,如果调用构造器,要么调用父类构造器,要么调用子类构造器,两者不能同时存在
- super只能出现在子类的方法或者构造方法中
- this:本身调用者这个对象 super:代表父类对象的应用
//Person
package Arrays;
public class Person {
public Person() {
// 隐藏代码,调用了父类的无参构造方法
super();
System.out.println("Person无参执行了");
}
protected String name = "zhangthree";
public void print() {
System.out.println("Person");
}
}
//Student
package Arrays;
public class Student extends Person{
public Student() {
System.out.println("Student无参执行了");
}
private String name = "zhangsan";
public void print() {
System.out.println("Student");
}
public void test() {
print();
this.print();
super.print();
}
}
public class Demo1 {
public static void main(String[] args) {
Student student = new Student();
student.print();
}
}
重写
- 需要有继承关系,子类重写父类的方法,方法名必须相同
- 参数列表必须相同
- 修饰符范围可以扩大,public > protected > default > private
- 抛出的异常范围可以被缩小,但不能扩大:ClassNotFoundException --> Exception(e)
// Person
package Arrays;
public class Person {
public static void test() {
System.out.println("Person=>test");
}
}
//Student
package Arrays;
public class Student extends Person{
public static void test() {
System.out.println("Student=>test");
}
}
// Demo1
package Arrays;
public class Demo1 {
public static void main(String[] args) {
// 方法的调用只和左边,定义的数据类型有关
Student student = new Student();
student.test();//输出Student=>test
// 父类的引用指向了子类
Person person = new Student();
person.test();//输出Person=>test
}
}
以上代码是方法的重载,静态的方法和非静态的方法区别很大
静态方法,在类加载的时候就已经生成了
非静态方法:才能实现重写,代码如下
//Person
package Arrays;
public class Person {
public void test() {
System.out.println("Person=>test");
}
}
// Student
package Arrays;
public class Student extends Person{
@Override // 注解, 有功能的注释
public void test() {
System.out.println("Student=>test");
}
}
package Arrays;
public class Demo1 {
public static void main(String[] args) {
// 方法的调用只和左边,定义的数据类型有关
// 能调用自己的方法或者继承父类的方法
Student student = new Student();
student.test();// Student=>test
// 父类的引用指向了子类
// 父类型,可以指向子类,但不能调用子类独有的方法
// 如果子类没有重写,那么就执行父类的方法
Person person = new Student();// 子类重写了父类的方法
person.test();// Student=>test
}
}
子类重写了父类的方法,无论创建子类的对象,还是父类的对象,在对象调用该方法的时候,都只会执行子类重写后的方法内容
多态
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 类型转换异常
- 存在条件: 继承关系,方法需要重写,父类引用指向子类对象
static 方法 不能重写
final 常量 不能重写
private 不能重写
总结:同一个方法,可以根据发送对象的不同而采用多种不同的行为方式