类和对象
面向对象和面向过程
举个例子:洗衣服
面向过程就是:先蓄水-》拿脏衣服-》倒洗衣粉-》搓衣服-》拧干-》防水-》漂一遍-》拧干-》晒衣服
面向对象是:打开洗衣机-》放脏衣服-》倒洗衣粉-》启动洗衣机
你不需要知道这个衣服到底是怎么洗,不需要知道这个过程,这就是面向对象了,此时的对象有洗衣机,人,洗衣粉,衣服
世间万事万物都可以是对象。
类的定义
属性(成员变量)
又叫字段 定义在类的内部,方法的外面
成员变量未初始化时有个默认值(系统会自动给你一个无参的构造方法下面会解释)
1.引用类型-》null
2.基本类型-》0(boolean-》false)
对象的引用.成员变量
当形参名和成员变量名冲突时,局部变量优先(this)
public String name;
public int age;
public String color;
行为(成员方法)
对象的引用.成员方法
public void wag(){
System.out.println(name+" 摇尾巴");
}
public void bark(){
System.out.println((name+" 汪汪"));
}
public void show(){
System.out.println("姓名: "+name);
System.out.println("年龄: "+age);
System.out.println("颜色: "+color);
}
实例化对象
由类创建对象的过程
采用new关键字,实例化对象
通过一个类可以实例化多个对象
public static void main(String[] args) {
// Data data = new Data();
// data.print();
Dog dog = new Dog();
dog.name = "大黄";
dog.age = 2;
dog.color = "黄色";
dog.wag();
dog.bark();
dog.show();
System.out.println("===========================");
Dog dog2 = new Dog();
dog2.name = "小黑";
}
this
this.属性-》访问当前对象的属性
this()-》调用当前对象的构造方法
1.必须放在构造方法里
2.必须放在当前构造方法的第一行
3.调用不能形成闭环的调用
对象的构造和初始化
构造方法:这个方法是一个很特殊的成员方法
- 方法名必须和类名相同
- 没有返回值,不是void
- 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
- 当你创建出一个构造方法后系统就不会再帮你创建一个无参的构造方法
- 构造方法可以重载
- 创建对象后编译器自动调用,并且在对象的生命周期中只调用方一次
public Data(){//无参
// year = 1000;
// month = 9;
// day = 19;
this(1000,9,19);
}
public Data(int year, int month, int day){//三个参数
this.year = year;
this.month = month;
this.day = day;
}
this.func();调用当前对象的成员方法
封装
什么是封装:套壳屏蔽细节
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互
一个文件最好只创建有一个类
现场定义一个小狗类和学生类和日期类
class Dog{
public String name;
public int age;
public String color;
public void wag(){
System.out.println(name+" 摇尾巴");
}
public void bark(){
System.out.println((name+" 汪汪"));
}
public void show(){
System.out.println("姓名: "+name);
System.out.println("年龄: "+age);
System.out.println("颜色: "+color);
}
}
class Student{
public String name;
public String gender;
public int age;
public int score;
public void doClass(){
System.out.println("去上学");
}
public void doHomeWork(){
System.out.println("做作业");
}
public void exam(){
System.out.println("考试");
}
}
public class Test {
/*
类和对象
*/
public static void main(String[] args) {
//把一个封装好了的日期类直接拿过来用
Data data = new Data();
data.print();
//隐藏了属性和实现细节
Dog dog = new Dog();
dog.name = "大黄";
dog.age = 2;
dog.color = "黄色";
dog.wag();
dog.bark();
dog.show();
System.out.println("===========================");
Dog dog2 = new Dog();
dog2.name = "小黑";
dog2.age = 12;
dog2.color = "黑色";
dog2.show();
}
}
public class Data {
private int year;
public int month;
public int day;
public Data(){
// year = 1000;
// month = 9;
// day = 19;
this(1000,9,19);
}
public Data(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public void print(){
System.out.println(year);
System.out.println(month);
System.out.println(day);
}
public static void main(String[] args) {
Data data1 = new Data();
data1.print();
Data data2 = new Data(2002,6,24);
data2.print();
Data data3 = new Data();
data3.setYear(2001);
data3.getYear();
data3.setMonth(1);
data3.getMonth();
data3.setDay(10);
data3.getDay();
data3.print();
}
}