OOP(Object-Oriented Programming)面向对象程序设计的编程语言的三大特性:封装、继承、多态
第一大特性:封装性(让类的调用者不需要具体知道类的实现细节),其目的是为了降低使用成本
类和对象的关系:
1)类是对象的抽象描述,而对象是类的实例化;2)定义类的时候并没有为其分配实际的内存空间进行存储,而创建对象却占有实际的内存空间。
使用class关键字创建一个类,不加权限修饰符则会默认为Default。(权限修饰符:public/protected/default/private)
//定义一个 人的类
class Person {
public int age; //(基本类型)属性/成员变量/实例变量/字段--默认初始值0
public String name; //(引用类型)属性/成员变量/实例变量/字段--默认初始值null
public boolean isMarried; //(基本类型)布尔默认值 false
// char默认值 \u0000
public void eat() { //成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
被static修饰的叫做静态成员,而静态成员变量/方法都不依赖于对象。
也就是说从此只和类相关,所以静态的方法只能访问静态的成员变量!
//使用关键字 new 创建一个对象
Person person = new Person();
//此条语句一旦执行,则会发生:1)堆上开辟一个空间存储new出来的对象
// 2)自动生成一个无参构造方法public Person()
person.eat() //调用谁就.谁
在IDEA中,alt+Insert可以快速生成构造函数,可以使用其来创建构造函数或者get/set方法
class Person {
private String name;
private int age;
private String sex;
//默认构造函数
public Person() {
//this调用构造函数
this("bit", 12, "man"); //必须放在第一行进行显示
}
//如果不写这个构造函数,那么系统默认生成上面的构造函数但不会显示,
//这两个构造函数之间的关系为重载
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex; //this 代表当前对象的引用,而不是很多书中说的当前对象
}
方法重载:方法名相同,但是参数(个数,类型)和返回值都不做要求,这样的两个方法构成重载!
方法重写:方法名、参数(个数,类型)和返回值必须完全一样,这样的两个方法构成重写,最好加上@override注解
//Object类是所有类的超/父类
//重写Object的toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}