封装
多是对属性而言的
数据的隐藏,仅暴露少量方法给外部使用
关键:私有属性:get/set
举例
#student
package OOP;
public class student {
private String name;
private int id;
private char sex;
}
#demo1
package OOP;
public class demo1 {
public static void main(String[] args) {
student s1 =new student()
s1.name="1111" #错报
}
}
当private改为public时可以调用
get/set:提供了一些可以操作这个属性的方法
//get获得这个属性
//set给这个属性设置值
简单来说就是让一些公共的方法去设置获获得一些不可访问属性的值
tips:idea快捷键alt+insert可以一键设置
#demo1
package OOP;
public class demo1 {
public static void main(String[] args) {
student s1 =new student();
s1.setName("xino");
System.out.println(s1.getName());
}
}
#student
package OOP;
public class student {
private String name;
private int id;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
当然可以在这些公共方法里设置条件来进行判断
继承
本质:对类的抽象
JAVA类中只有单继承没有多继承
子类是父类的扩展(extands)
记住一句话就可以:子类可以继承父类的全部方法
#person
package OOP;
public class person {
public void say(){
System.out.println("xino");
}
}
#student
package OOP;
public class student extends person {
private String name;
private int id;
private char sex;
}
#demo1
package OOP;
public class demo1 {
public static void main(String[] args) {
student s1 =new student();
s1.say();
}
}
tips:对于私有东西,无法被继承
tips:ctrl+h可以查看子类父类关系
super注意点:
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法
重写:子类重写父类方法
前提:需要有继承关系,子类重写父类
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大不能缩小
4.抛出的异常:范围:可以被缩小,但不能扩大
多态
同一方法可以根据发送对象的不同而采用多种不同的行为方式
注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系,类型转换异常
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象
instanceof关键词:判断两个类之间是否存在父子关系
高转低才能使用低的方法
#demo1
package OOP;
public class demo1 {
public static void main(String[] args) {
person obj =new student();
student student = (student)obj;
student.go();
}
}
#student
package OOP;
public class student extends person {
private String name;
private int id;
private char sex;
public void go() {
System.out.println("hhhhhh");
}
}
输出:hhhhhh
tips:写一起就是
((student)obj).go();
小结:1.只能父类的引用指向子类的对象
2.把子类转换为父类,向上转型(可能会丢失一些方法)
3.向下转型需要强制转换
4.方法方法的调用(降级升级,提高利用率)