1.封装:
封装是把行为和数据包裹起来,让外界只能通过我们设计好的方式去访问和操作。我们可以将生活中各种事物进行抽象封装形成类,也可以通过private修饰符来封装属性与方法,不过需要注意的是,封装后需要手动提供对应被封装资源对外公共的操作方式。
2.继承:
一种联结类的层次模型,java类只支持单继承,继承是通过已有的类派生出新的类的技术,新类吸收已有类的属性行为,并且可以新增特有的属性和行为;父类的所有属性行为被子类继承,私有属性同样被继承,但子类不能进行访问和使用,如需使用,则提供公开的方法。
3.多态:
(统一调度标准)多态性是指可以尽量屏蔽不同类的差异性,提供通用的解决方案。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
向上造型:父类引用指向子类,编译看左边运行看右边,实际干活的是子类,创建出来的子类对象认为自己是父类类型,只能访问父类中的属性和行为。
向下造型:向下造型的前提是先向上造型,通过向下造型使得子类特有的属性和行为可以被访问。
造型的代码:
package ooday04;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
//向上造型---引用父类实际干活的是子类
Person p1 = new Student("tony",19,"datong","2019320121");
Person p2 = new Teacher("jerry",16,"yangquan",100000);
Person p3 = new Doctor("jack", 18, "taiyuan", "1");
System.out.println(p1.name);
System.out.println(p2.name);
//向下造型---访问子类的特有属性和行为(前提:先向上造型再向下造型)
Student s1 = (Student)p1;
System.out.println(s1.studID);
}
}
class Person{
String name;
int age;
String address;
//在父类中定义的变量在父类中使用构造方法赋值,避免子类重复赋值,代码冗余。
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
void sayHi(){
System.out.println("大家好!!!");
}
}
class Student extends Person{
String studID;
public Student(String name, int age, String address,String studID) {
super(name,age,address);
this.studID = studID;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
", studID='" + studID + '\'' +
'}';
}
}
class Teacher extends Person{
double salary;
public Teacher(String name, int age, String address, double salary) {
super(name, age, address);
this.salary = salary;
}
}
class Doctor extends Person{
String level;
public Doctor(String name, int age, String address, String level) {
super(name, age, address);
this.level = level;
}
}