什么是面向对象
面向对象是指我们自己去定义一个类,在类中有一些方法,我们都过实例化这个类的到对象,再去调用这个对象的方法。
形象一点说 我们把 “面向” 看成 ‘使用’ ,将 “对象” 看成 ‘工具’ ,所以面向对象编程就是使用工具编程。
类的结构
在类中有5种结构,分别是:
属性
我们定义的变量或者常量就是这个类的属性
public class User {
private String name;
private String password;
}
方法
方法是一组为了实现特定功能的代码块的集合。 方法在语法上的功能主要有以下两个: 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护性强。
public class User {
private String name;
private String password;
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
构造器
构造器是一种特殊类型的方法,负责类中成员变量(域)的初始化。 构造器的用处是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化。
public class User {
private String name;
private String password;
public User() {
}
public User(String name,String password) {
this.name = name;
this.password = password;
}
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
代码块
所谓代码块就是用大括号 ( {})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。. 一般来说代码块是不能单独运行的,它必须要有运行主体。代码块可以根据类的作用选择性的创建。
代码块有4种类型,分别是 普通代码块、静态代码块、同步代码块、构造代码块,我们以普通代码块为例:
public class User {
private String name;
private String password;
{
name = "zhangsan";
password = "123" ;
}
public User() {
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
内部类
如果一个类A,在这个类A中的方法不足够去完成他的工作,需要另一个类B共同完成,但是类B又无法作用在别的类中,而如果我们把这个类定义在外部,会导致我们文件的臃肿,所以我们将一个类的专用类写成内部类。最经典的例子就是Map(这里就不放代码了)
类的特点
封装
封装是一种隐藏技术,封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。封装的关键词有 public 、producted 、private 、缺省
public class Animal {
public String name; //公开
protected String password; //受保护
private String phone; //私有
String gender; //缺省
}
继承
继承是一个对象获取父对象的所有属性和行为的机制。 它是面向对象编程系统(OOP)的重要组成部分。 Java中继承的思想是,创建基于现有类的新类。 从现有类中继承,可以重用父类的方法和字段。 此外,还可以在当前类中添加新方法和字段。
public class Dog extends Animal{
public void show(){
System.out.println("Dog can dance");
}
}
多态
程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。. 因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
public class DogTest {
public static void main(String[] args) {
Animal cat = new Cat();
}
}
多态使用的必要条件
- 继承或者实现接口或抽象类
- 重写父类或者抽象方法
- 父类的对象指向子类的引用
Bean类
JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。 特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。 名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
public class Person {
private String name;
private String password;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
变量初始化的顺序
静态初始化 --> 代码块初始化 --> 构造器初始化 --> 动态初始化