Java三大特性封装,继承 ,多态
封装
- 我们编写程序一定要按照 **“高内聚,低耦合 ”**的原则
- 封装可以提高数据的安全性,将程序数据处理包装到程序内部处理,不允许外部干涉,只暴露少量的接口给外部调用。
- 属性的私有 private 通过 get/set来进行数据操作。
生活中的所有家电都被包装到外壳中,只暴露给一些功能使用,这些功能的实现过程不得而知,在家电内部结构中完成,这就是“封装”
ALT + insert 快速生成get/set方法;(部分电脑需要加上 fn 键)
继承
- 继承关系的关键字:extends
- 被继承者成为父类(基类) 继承者称为子类(派生类)
- 发生继承关系后子类可以获得父类的属性和方法 (private 私有属性 不可继承)
- 子类可以重写父类的方法 在调用时会执行子类方法。
super
- super用来调用父类中的方法和属性
- 当有继承关系时 在子类创建无参构造方法时会默认调用父类中的无参构造方法
- 在子类的构造方法中掉用父类的构造方法要写在第一行
- 在继承关系中 父类的无参构造方法会默认在子类的无参构造方法中隐式调用
可以看到代码中子类中并没有调用父类的构造方法 但是控制台输出了父类的构造方法
public test1() {
super(); //没看到的就是这句代码 在程序运行时自动生成了;
System.out.println("子类调用");
}
- 当父类中没有无参构造方法时,却有 有参构造方法 时
- 子类必须通过显式的调用父类的有参构造方法才能创建自己的构造方法
- 一般在父类创建有参构造方法时 需要先创建一个无参构造方法 以保证子类在需要创建构造方法时不会出错
多态
- 即一个不同的方法可以根据发送对象的不同而采取多种不同的行为方式
- 一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多(父类,有关系的类)
父类的引用指向子类
//创建两个不同的类
public class Person{
}
public class Student{
}
Student s1=new Student();
//用父类的引用指向子类
Person s2=new Student();
Object s3=new Student(); //Object 是所有类的父类 是顶层 所有类都默认继承 Object 类
这些实例的方法取决于子类
当父类中没有方法 子类中有 方法不能被执行
//创建两个不同的类
public class Person{ //父类中没有方法
}
public class Student{ //在子类中创建一个方法
public void test() {
System.out.println("子类调用");
}
}
//实例化对象
public static void main(String[] args) {
Student s1=new Student();
//用父类的引用指向子类
Person s2=new Student();
s1.test(); //正常调用
s2.test(); //报错显示没有该方法
}
当父类和子类中有相同的方法 子类的方法会被执行
//创建两个不同的类,创建两个同名的方法
public class Person{
public void test() {
System.out.println("父类调用");
}
}
public class Student{
public void test() {
System.out.println("子类调用");
}
}
//实例化对象
public static void main(String[] args) {
//用父类的引用指向子类
Person s2=new Student();
s2.test();
}
输出结果为:
多态的注意事项
- 多态是方法的多态 属性没有多态;
- 两个类之间需要存在关系;