面向对象编程(OOP: object-oriented programming)
定义:
就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。 面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象。
理解:
在显示生活中,每个东西都是一个对象,例如:一只小花猫就是一个对象,它有名字,品种,毛色等属性。有猫叫,吃食物,喝水等行为(方法)。所以每只猫就是一个对象。
类 :
是一类事物的模板,描述一类事物共有的属性和行为,比如猫类。
对象:
对象是类的一个实例(不是找一个对象),有属性和行为。比如上面讲到的小花猫就是猫类的一个对象,它有猫的一些共同的特性。
面向对象的三大特征
1.封装:
将对象的属性和行为封装成一个密不可分的整体。将一些不想被外界访问的属性和方法封装成的私有的,只对外暴露一个入口。
封装步骤:
属性私有化:将属性封装成私有的private,将name和age设置为私有,只能本类访问,其他类不能访问,对信息进行了隐藏。
public class Person {
private String name;
private int age;
}
留入口: 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,(get/set方法)
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public boolean isAlive() {
return alive;
}
}
使用this关键字是为了解决实例变量和局部变量重名的问题。
封装可以提高代码的安全性,比如一般的类的属性不用private修饰,直接可以 key= value ,当我们使用private修饰之后就无法随意修改了,而且还可以做一些判断条件比如age属性:
public void setAge(int age){
if(age>100 ||age<0){
System.out.println("年龄异常~")
return;
}else{
this.name = name;
}
}
封装的细节:
- 私有化属性
- 提供get(获取)和set(设置)方法
2.继承:
关键字:extends
继承就是子类继承父类的特征和行为。让子类对象拥有父类的属性和方法。
继承实现:
public class Person{} //父类
public class Student extends Person{} //子类 ,extends关键字使子类继承父类
继承的好处:
- 提高代码复用性
- 提高代码可维护性
- 使得类和类之间产生了关系,是多态的前提
3.多态:
在java中有两种多态,一种是方法多态(重写,重载),另外一种是对象的多态(向上转型、向下转型)
-
方法的多态
-
重写:当父类的方法无法满足子类需求时,子类重新在子类中写一遍该方法(返回值类型,方法名,参数列表都要与父类一致)
//父类run方法 public class Person { //父类的run方法 public void run(){ System.out.println("人类会跑~"); } } //不满足子类需求,子类重写run方法 public class Student extend Person{ @Override public void run(){ System.out.println("学生,跑的飞快~"); } } //测试: //创建学生对象 Student s = new Student(); //调用的是子类重写的run s.run(); //学生跑的飞快~
-
重载:在同一个类中,有多个相同需求的功能,但各有不同。就可以使用方法重载(方法名一样,参数列表的数量或者数据类型不同),系统会根据传递的实参自动匹配对应的方法。
public class Test02{ public static void main(String[] args){ //需求:传入2个int值返回最大值 System.out.println(getMax(10,20)); //需求:传入3个int值返回最大值 System.out.println(getMax(10,20,30)); //需求:传入2个double值返回最大值 System.out.println(getMax(10.0,20.0)); //需求:传入3个double值返回最大值 System.out.println(getMax(10.0,20.0,30.0)); } public static int getMax(int a,int b){ return a>b?a:b; } public static int getMax(int a,int b,int c){ return getMax(getMax(a,b),c); } public static double getMax(double a,double b){ return a>b?a:b; } public static double getMax(double a,double b,double c){ return getMax(getMax(a,b),c); } }
-
-
对象的多态
-
向上转型:子类对象变为父类对象(自动)
Person person = new Student(); //向上转型
-
向下转型:父类对象变为子类对象(强制)
Student student = new Person(); //向下转型
-
总结:
面向对象编程就是把一切事物都看作为一个对象,都拥有属性和行为。可以通过调用属性和行为对该事物进行操作。