面向对象编程(Object-Oriented Programming. OPP)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
类的概念
类是一组具有相同特征和行为对象的抽象描述。
类主要由属性和行为组成,属性和行为又称为类的成员变量和成员方法,统称为类的成员(除此之外,类的成员还包括构造方法,代码块{})
类描述的是抽象概念,用于描述一个群体。
类就是现实生活中所说的“类型”
对象的概念
对象是类的一个具体实现,是客观存在的一个具体事物/实体,具有唯一性和独立性。
对象用于描述客观事物的一个实体,由一组特性和行为构成。
- 类是抽象的,表示群体概念。
- 对象是具体的,表示个体概念。
- 先具有的对象,然后抽象各个对象之间非部分,归纳出类再认识其他对象
【生活案例】
- 类是一个图纸,对象是根据该 图纸制造的多个实物。
- 类是一个模具,对象是使用模具制造的多个铸件。
- 类是上海大众汽车,对象就是大家购买的一辆具体的上海大众汽车。
程序中的类和对象
属性
>类或者对象的特征称为属性,对象属性具备的值称之为属性值。
>同一类对象都具有相同的属性,但属性一定不一样,对象是数据的载体。
>属性用于定义该类或该类对象包含的数据。
>属性的作用范围是整个类体。
方法
类或者对象的行为称之为方法,同一类的对象都具有相同的方法。
总结
类(class)和对象(object)是面向对象中的两个核心概念。
一个类可以实例化多个对象,而一个对象只能属于一个类。
类是一组相同属性和方法的对象的集合,对象是用来描述客观事物的一个实体,由一组属性和方法构成。
类的定义
定义类的语法:
[修饰符] class 类名{
//方法内容
}
【实例】定义一个学生类
public class Student{
// 定义属性
String sId;
String name;
int age;
String gender;
// 定义方法
public void sayHi(){
System.out.println(name + " say hello!");
}
public void learn(String cName){
System.out.println(name + " is learning " + cName);
}
}
//该类中包含两个成员,一个是成员变量也叫属性,有些地方也称为字段,一个是成员方法简称方法。
对象的初始化
实例化:类创建后,可以用于类来创建一个对象。
public class Test01{
public static void main(String[] args){
// 创建一个对象
// 【1】s1是引用数据类型,其指向的内存在heap区
// 【2】通过Student实例化了一个对象s1
Student s1 = new Student();
// System.out.println(s1);
// 【3】.语法访问属性和方法
s1.name = "张三";
s1.sId = "001";
s1.age = 20;
s1.showInfo();
s1.sayHi();
s1.learn("java");
Student s2 = new Student();
System.out.println(s2);
}
}
面向对象的三大特征
封装、继承、多态,还有一个抽象(应该是指类)
封装
- 概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
- 好处:
只能通过规定的方法访问数据。
隐藏类的实例细节,方便修改和实现。
需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作。当然最好使用get/set方法,比较标准。
继承
inheritance :继承
constructor:构造器
abstract:抽象
override:覆盖、重写
overload:重载
继承(inheritance)是Java
OOP中一个非常重要的概念。继承是在复用已存在的类的方法和属性的基础上,还可以添加新的方法和属性。Java用extends
关键字来表示继承关系(is-a)。被继承的类称为超类(superclass)、基类(base class)、父类(parent class),而新类被称为子类(subclass)、派生类(derived
class)或孩子类(child class)。
java支持单继承支持多实现
多态
不同对象对同一操作的不同实现。
使用多态的优势:可以减少代码量,提高代码的可扩展性和可维护性。
继承是多态的基础,没有继承就没有多态。
语法:对象名 instanceof 类或接口
抽象类
类是对一类事物的描述,如果一个类中没有包含足够的信息 来描绘一个具体的对象,那么这个类就是抽象类
-
抽象类和抽象方法都用abstract关键字声明。不能用来修饰属性和构造方法
-
抽象类不是不能实例化,而是不能直接实例化,可以通过子类间接实例化。
abstract不能和private、final、static修饰同一个方法