面对对象三大特性
封装,继承,多态
封装
尽可能隐藏对象的内部实现细节,控制对象的修改,访问的权限
访问修饰符:private
将属性修饰为私有,仅本类可见
安全性,对外部提供一个接口
public class Person {
//仅本类可见
private int age;
public void inAge(int age){//封装到类里,减少主函数的判断
if(age >= 0 && age <= 100)this.age = age;
else this.age = 18;
}
public int getAge() {
return this.age;
}
}
public class Main {//类
public static void main(String[] args){
Person peo2 = new Person();
peo2.inAge(20000);
System.out.println(peo2.getAge());
}
}
继承
是类与类之间特征和行为的一种获得
两个类之间的继承关系,必须满足“is a”的关系 IS-A关系
例:Dog is an Animal.
所以狗子可以继承动物的特性
父类的选择
例:狗子是一种动物,一种生物,一种物质
动物 < 生物 < 物质
功能越精细,重合点越多,越接近直接父类 ,也就是动物
功能越粗糙,重合点越少,越接近Object类
我们可以抽取多个具体事物的共性,进而定义父类
父类的属性和方法都可以继承
public class Pet {
private String name,gender;
private int love,health;
public void eat(){
System.out.println(this.name + "正在吃东西");
}
//下面进行了封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
}
public class Cat extends Pet{//extends从Cat类中继承属性和方法
public void Playcat(){
System.out.println("你正在🦌名为" + this.getName() + "的小猫,她很开心");
}
}
//方法 <-> 函数
public class Main {//类
public static void main(String[] args){
Cat coke = new Cat();
coke.setGender("喵喵喵");
coke.setLove(999);
coke.setHealth(-114514);
coke.setName("史");
coke.Playcat();
coke.eat();
}
}
继承的特点
单根性:一个类只可以有一个直接父类,但可以有多个间接父类
传递性:类之间可以多级继承,属性和方法逐级叠加
public class Person {
String name;
int age;
}
public class SE extends Person {
public void code(){
System.out.println(name + "正在编写代码");
}
}
public class Stu extends SE{
double score;
public void doWork(){
System.out.println("名为" + name +"的学生正在做编程作业");
}
}
//方法 <-> 函数
public class Main {//类
public static void main(String[] args){
Stu baba = new Stu();
baba.name = "BABA";
baba.score = 82.3;
baba.age = 14;
baba.doWork();
baba.code();
}
}
例:Student < SE(software Engineer) < Person
属性的继承
父类所有属性都可以被继承
父类的私有属性能被继承但是不能被访问
子类和父类有同名属性的时候可以通过this,super关键字区分【默认指向子类】
public class SE {
double score = 80.25;
}
public class Stu extends SE{
double score = 72.10;
String name;
public void pt(){
System.out.println(score);//先在当前类中找,找不到再去父类中去找
System.out.println(this.score);//当前类
System.out.println(super.score);//直接或间接的父类
}
}
//方法 <-> 函数
public class Main {//类
public static void main(String[] args){
Stu baba = new Stu();
baba.pt();
System.out.println("------");
baba.score = 82.3;
baba.pt();
}
}
/*输出
72.1
72.1
80.25
------
82.3
82.3
80.25
*/
super和this均在Stu这块内存中