封装、继承、多态
封装
信息隐藏:禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。
类的属性一般设置为私有,可以通过get和set的方法来获取和设置属性值。
快捷键:alt+insert
优点:1、提高程序的安全性,保护数据。2、隐藏代码实现细节。3、统一接口。4、提高系统可维护性。
public class Person {
private String name;
private Boolean sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void go(){
System.out.println("I can go!");
}
}
class Aplication {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
Person p4 = new Person();
p1.setName("小明");
p2.setName("小红");
p3.setName("小芳");
p4.setName("小霞");
p1.setSex(true);
String sex;
if(p1.getSex()==true){
sex="男";
}else {
sex="女";
}
p1.setAge(18);
System.out.println(p1.getName()+"的性别是"+sex+",年龄是"+p1.getAge());
}
}
继承
继承的本质是对一批类的抽象,从而实现对现实世界更好的建模。extends的意思是”扩展“,子类是父类的扩展,java中的类只有单继承没有多继承。继承是类和类之间的关系。除此之外,类和类的关系还有依赖,组合,聚合等。继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类拥有父类的全部方法及属性。修饰为private的不可继承。
Object类:祖父类,Java中默认所有类都是object的子类。
super:调用父类的无参构造。必须在构造方法中的第一行。只能出现在子类的方法或构造方法中。
this:调用子类(本身)的无参构造。必须在构造方法中的第一行。
super和this无法同时使用。
public class Student extends Person{
private int number;
public Student() {
super();
}
public void study(){
System.out.println("I can study!");
}
}
public class Aplication {
public static void main(String[] args) {
Person p1 = new Person();
Student s1=new Student();
s1.setName("小红");
p1.setName("小明");
p1.setSex(true);
String sex;
if(p1.getSex()==true){
sex="男";
}else {
sex="女";
}
p1.setAge(18);
System.out.println(p1.getName()+"的性别是"+sex+",年龄是"+p1.getAge());
System.out.print(s1.getName()+"说");
s1.go();
}
}
方法的重写
子类重写父类
子类与父类都是静态方法,实例化对象的调用只与左边定义的类型有关。(方法重写会有标志,静态方法并非是方法的重写)非静态方法,子类重写父类的方法,调用子类的方法。
方法重写的条件:继承关系,子类重写父类
1、方法名必须相同2、参数列表必须相同3、修饰符可以扩大但不能缩小4、抛出异常范围可以缩小但不能扩大。
快捷键alt+insert:overide
多态
一个对象的实际类型是确定的,但可以指向的引用类型是不确定的。
多态是方法的多态,根据发送的对象不同,采用不同的行为方法。
instanceof 类型转换
System.out.println(s1 instanceof Person);
System.out.println(p1 instanceof Person);
System.out.println(s2 instanceof Teacher);