引:什么是面向对象?
面向对象,专注于由谁(哪个对象)来解决这个问题,而调用者无需关注对象实现的细节。
编程特点:出现了一个个的类,从类中拿到对象,通过对象直接解决问题。
应用:Java PHP c++ c# Python
面向对象的三大特征:继承 封装 多态
分别了解继承、封装、多态 ↓↓↓
一、继承
1、子类继承父类,使用extends关键字。
代码示例:
public class Person {
String name;
String sex;
int age;
}
public class Chinese extends Person {
String language;
}
Chinese子类继承Person父类
2、子类中,需要访问父类成员,使用super关键字。
super.属性 访问父类属性
super.方法 访问父类方法
→ 如果,子类中没有同名的属性和方法覆盖父类,则依然可以直接使用 this.属性 调用从父类中继承的非私有属性。
但是,如果子类中重写了与父类同名的属性:this.属性 访问的是本类;super.属性 访问的是父类属性。
例:
public class Chinese extends Person {
String name = "aa";
String language = "Chinese";
}
System.out.println(super.name);
System.out.println(this.language);
→ 在子类构造函数中,直接使用super(); 表示调用父类构造。而且,super()函数必须在子类构造的第一行。
代码示例:
public Chinese (String name,String sex,int age,String language){
super(name,sex,age);
this.language = language;
}
注意:即使使用super关键字,也不能继承父类的私有属性和私有方法。
3、子类可以访问父类哪些属性和方法?
private 本类
默认省略(friendly) 本类 同包
protected 本类 同包 非同包子类
public 本类 同包 非同包子类 其他任何包都可用
→ 子类与父类不在同一包中,那么在子类中,子类实例可以访问其在父类中继承而来的protected方法,而不能访问父类实例的protected方法。
4、继承后的初始化顺序:
父类属性——父类构造方法——子类属性——子类构造方法
5、在Java中,继承只能单继承,不能多重继承。
但是,可以多层继承:
例如:
public class Test1{}
public class Test2 extends Test1{}
public class Test3 extends Test2{}
此时,Test3就可以得到Test2和Test1两个类中的非私有属性。
二、封装
1、属性的封装
1)、将类的属性进行私有化处理,不允许外部程序进行直接访问。并对外提供统一的方法用于设置和读取私有属性;
2)、实现访问控制,限制属性访问。但,不是拒绝访问。
作用:只能通过规定的方法访问数据,方便在方法中加入控制语句,防止不合法数据赋值。
get()、set()方法访问private属性 ↓
示例:
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
2、封装
除了属性的封装之外,将需要重复使用的代码提取到方法中,这叫方法的封装。
将相同的属性和方法抽象成一个类,这也是封装的思想。
三、多态
1、多态:同一种事物,由于条件的不同,展示出不同的结果,叫做多态;
示例:
英国人说英国话,中国人说中国话,这不叫多态。
同样是人,有人说中国话,有人说英国话,这就是多态。
2、程序中的多态:同一个引用类型,由于使用不同的对象实例,而执行不同的操作。
实例:
Chinese c = new Chinese(); c.say();
English e = new English(); e.say();
→ 英国人说英国话,中国人说中国话,这不叫多态。
Person p = new Chinese(); p.say();
Person p = new English(); p.say();
→ 同样是人,有人说中国话,有人说英国话,这就是多态。
3、实现多态的条件:
① 子类继承父类;
② 子类重写父类方法;
③ 父类引用指向子类对象。 // 保证:同一个父类引用类型,使用不同的子类对象实例,而执行不同的操作。
以上便是面向对象的三大特征!
附:
方法重载和方法重写:
位置 方法名 返回值 参数列表 访问控制符
override方法重写: 子类 相同 相同 相同 不能比父类更严格
overload方法重载: 本类 相同 无关 不同 无关
注意:由于子类无法继承父类的私有属性,因此父类中的private方法无法被重写。