首页 > 技术文章 > 8. java 面向对象

hq82 2019-10-12 09:58 原文

一、面向对象特征

1. 封装

  • 方法就是一种封装
  • 关键字private也是一种封装
封装就是讲一些逻辑细节信息隐藏起来,对于外界不可见;外界只需调用我即可;
一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但,超出了本类范围就不行了;
间接访问private成员变量,就是定义一对Getter/Setter方法;必须叫setXxx、getXxx命名规则;
对于Getter来说,不能有参数,返回值类型和成员变量对应;
对应Setter来说,不能有返回值,参数类型和成员变量对应;
对于基本类型当中的Boolean值,Getter方法一定要写成isXxx形式,而Setter不变
public class Student {
    private int age;
    String name;
    public void show(){
        System.out.println("我年龄"+age);
    }
    // 这个成员方法,专门用于向age设置数据
    public void setAge(int num){
        age = num;
    }
    // 这个成员方法,专门用于获取age数据
    public void setAge(int num){
        return age;
    }
}
public class Demo {
    public static void main(String[] args) {
       
    }
    
    public static void method(Phone param){
        System.out.println(param.name);
    }
}
// this关键字作用

当方法的局部变量和类的成员变量重名的时候,根据"就近原则",优先使用局部变量;如果需要访问本类当中的成员变量,需要使用格式->this.成员变量名

2. 继承

3. 多态

二、类和对象关系

1. 类

  • 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
  • 属性:该事物的状态信息
  • 行为:该事物能够做什么

2. 对象

​ 是一类事物的具体实现,对象是类的一个实例,必然具备该类事物的属性和行为。

java类当中
 - 成员变量(属性)
 - 成员方法(行为)
    
注意事项:
    成员变量定义在类当中,方法外面
 	成员方法需删除static

3. 对象的创建和使用

通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。
1. 导包
	import 包名称.类名称;
	对于和当前类属于同一个包的情况,可以省略导包语句
2. 创建
	类名称 对象名 = new 类名称();
	Student stu = new Student();
3. 使用
	使用成员变量,对象名.成员变量名
	使用成员方法,对象名.成员方法名(参数)

4. 使用对象类型作为方法参数

// phone.java
package cn.test.obj;

public class Phone {
    int number;
    String name;
    public void call(String who){
        System.out.println(who +"带电话给奥巴巴");
    }
}
// Demo.java
package cn.test.obj;

public class Demo {
    public static void main(String[] args) {
        Phone ph = new Phone();
        ph.number = 18900000;
        ph.name = "apple";
        method(ph);
    }
    
    public static void method(Phone param){
        System.out.println(param.name);
    }
}

5. 使用对象类型作为方法返回值

// phone.java
package cn.test.obj;

public class Phone {
    int number;
    String name;
    public void call(String who){
        System.out.println(who +"带电话给奥巴巴");
    }
}
// Demo.java
package cn.test.obj;

public class Demo {
    public static void main(String[] args) {
        Phone two = new getPhone();
        System.out.println(two.number);
        System.out.println(two.name);        
    }
    
    public static Phone getPhone(){
        Phone one = new Phone();
        one.number = 18900000;
        one.name = "apple";
        return one
    }
}

三、成员变量和局部变量区别

  • 定义位置不同

    • 成员变量:在方法外部,直接写在类中
    • 局部变量:在方法内部
  • 作用范围不同

    • 成员变量:整个类全都可以使用
    • 局部变量:只有方法当中可以使用,出了方法就不能再使用了
  • 默认值不同

    • 成员变量:有默认值,和数组一样
    • 局部变量:没有默认值;想使用,必须手动进行赋值
  • 内存位置不同

    • 成员变量:堆内存
    • 局部变量:栈内存
  • 生命周期不同

    • 成员变量:随对象创建而诞生,随对象被垃圾回收而消失
    • 局部变量:随方法进栈而诞生,随方法出栈而消失

四、构造方法

​ 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。

// 格式
public 类名称(参数类型 参数名称){
    方法体;
}
注意事项:
1. 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
2. 构造方法不要写返回值类型,连void都不写
3. 如果没写构造方法,编译器会默认生成构造方法,没有参数、方法体什么都不做
4. 构造方法不能return一个具体的返回值
5. 构造方法也是可以重载的

public class Student{
    private String name;
    private int age;
    
    public Student(){
        System.out.println("构造方法执行!");
	}
	
	public Student(String name, int age){
		this.name = name;
        this.age = age;
        System.out.println("构造方法执行!");
	}
	
	public void setName(String name){
		this.name = name;
	}
	
	public int getName(){
		return name;
	}
	
	public void setAge(int age){
		this.age = age;
	}
	
	public int getAge(){
		return age;
	}
}
public class Demo {
    public static void main(String[] args) {
    	// new对象就是在调用构造方法
    	Student stu = new Student();
    	// 打印->构造方法执行!
        Student stu2 = new Student("Helo", 10)
        System.out.println("姓名" + stu2.getName() + "年龄" + stu2.getAge());
        stu2.setAge(12);
    }
}

五、标准类

/*
    一个标准的类通常拥有下面四个组成部分:
    1. 所有成员变量都要使用private关键字休息
    2. 为每个成员变量编写一对Getter/Setter方法
    3. 编写一个无参数构造方法
    4. 编写一个全参数构造方法
    这个标准的类也叫 Java Bean
*/

public class Student{
    private String name;
    private int age;
    自动生成Geter/Setter:idea->顶部栏[Code]->Generate->Getter/Setter->把变量选中
    自动生成构造方法:idea->顶部栏[Code]->Generate->Constructor->Select None
    自动生成构造方法:idea->顶部栏[Code]->Generate->Constructor->把变量选中
}

public class Demo01{
    public static void main(String[] args){
        Student stu01 = new Student();
        stu01.setName("jone");
        System.out.println("姓名" + stu01.getName());
    }
}

推荐阅读