JAVA面向对象之三大特征
本文参考内容: 牛客网,本文仅为本文学习知识总结。
面相对象三大特征
■封装
隐藏实现细节,再提供特定的方法访问对象内部的信息,可以提高程序的安全性;
■继承
继承于某一个类,就可以直接获得这个类的属性和方法,可以提高程序的复用性;
■多态
程序运行时,在需要父类的地方均可以传入子类的对象,可以提高程序的扩展性。
封装
封装的实现方式
■修饰符
private, protected, public
■访问级别
private -> default -> protected -> public . 小到大
■
常见办法
1.使用private修饰成员变量,避免它被直接访问;
2.为该成员变量增加赋值、取值方法,使用public修饰这两个方法; setXxx()赋值 getXxx()取值
3.在这两个方法中,可以增加任意的数据处理逻辑。
例子:
Driver.java:
package nowcoder4.part01;
//对age封装
public class Driver {
private String name;
private int age;
public Driver(String name,int age){
this.name = name;
this.setAge(age);
}
//公有的set方法,用于赋值
public void setAge(int age){
if (age<0){
this.age = 0;
}else if (age>200){
this.age = 200;
}else {
this.age = age;
}
}
//公有的get方法,用于取值
public int getAge(){
return this.age;
}
//通常所有的属性都做封装
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Game.java:
package nowcoder4.part01;
//封装
public class Game {
public static void main(String[] args) {
Driver d = new Driver("perth",-10);
System.out.println(d.getName());
System.out.println(d.getAge());
d.setAge(-20);
System.out.println(d.getAge());
d.setAge(20);
System.out.println(d.getAge());
d.setName("plan");
System.out.println(d.getName());
}
}
继承
继承的详细规范
1.Java采用extends关键字实现继承,实现继承的类叫子类,被继承的类叫父类;
2.任何类都只能有一个直接的父类,和无数个间接的父类,多个类可以继承于同一个父类;
3.若一个类没有显示指定父类,则这个类默认继承于java. lang . object;
另外,从父类角度看,父类派生了子类,但从子类角度看,是子类扩展(extends) 了父类。
重写
什么是重写
在子类中,定义与父类同名的方法,用来覆盖父类中这个方法的逻辑,叫做重写。
重写的规范
1.子类方法的名称、参数列表与父类相同;,
2.子类方法的返回类型与父类相同或更小;
3.子类方法声明的异常与父类相同或更小;
4.子类方法的访问权限与父类相同或更大。
重载与重写
名称
重载英文是overload,重写英文是override。
作用
1.重载发生在同一个类的多个同名方法之间,让代码便于调用;
2.重写发生在子类与其父类的同名方法之间,让代码易于复用。
父类与子类之间也存在重载,即在子类中定义出与父类名称相同、参数列表不同的方法。
实例:
父类:Vehicle
package nowcoder4.part02;
public class Vehicle {
String brand;
void run(){
System.out.println(brand+"跑得真快!");
}
Vehicle myself(){
return this.myself();
}
}
子类:Airplane
package nowcoder4.part02;
public class Airplane extends Vehicle{
@Override //注解标记,说明是重写
void run() {
System.out.println(brand+"飞机非的真快!");
}
@Override
Airplane myself() { //这里子类的返回值类型是比父类小
return this;
}
}