面相对象

基础概念

非常重要

类似:手机需要考虑属性 功能。

在程序中,事物可以对应java中的类(class)

属性即成员变量,功能即成员方法

类体现的就是这个封装的思想,类是java语言中的最小单位。

面向对象的特征:

封装 继承 多态

思想:

创建对象,使用对象,指挥对象

定义类就是为了去使用它 那创建一个测试类 提供一个主方法,作为入口,在主方法中提取使用。

类是一个抽象的概念。不能直接使用,必须对类进行实例化。

实例化就是创建该类的对象,然后使用这个类的对象,去调用类中的属性。

定义类其实就是定义类的成员(成员变量和成员方法)

成员变量:在类中 方法外。

成员方法:
public void 方法(){}

类:一组相关的属性的行为的集合。

对象:该类的具体体现(例如学生类 对象有班长)

创建对象可以使用关键字new 完成类的实例化。

格式:Person p=new Person(){类名 对象名=new 类名()}

通过对象名调用类中的方法,String name=p.name;

面向对象的使用方法:

需要一个基本类 一个测试类。俩要求在一个包下面

mytext.java(测试类)

package com.itheima.demo;

public class mytest {

//main方法作为一个入口
    public static void main(String[] args) {
    //创建phone类的对象,用对象来调用类中的成员变量
        phone p = new phone();
        //调用成员变量,也就是调用成员变量中的属性
        int price = p.price;
        String brand = p.brand;
        char color = p.color;
        //调用成员方法
        p.ad();
        p.fab();
        p.gn();

    }


}

phone.java

package com.itheima.demo;

import java.sql.SQLOutput;

public class phone {

//定义成员变量
    int price = 2000;
    String brand = "OPPO";
    char color = '白';

    //定义成员方法。类名就是自己起的和这个事物有关的相关属性。
    一个类可以创建很多对象。
  public void ad (){System.out.println("聊天");}
    public void fab(){System.out.println("付钱");}
    public void gn(){System.out.println("搜索");}






}
内存图:

每new一个对象 都会在内存中开辟新的空间。

面向对象中 如果俩对象相同,也就是地址共用。

画堆栈图的时候先画test因为里面有main方法

成员变量和局部变量的区别:

局部变量:定义在方法中或者方法声明上的变量。局部变量属于方法 随着方法的调用而产生,随着方法的调用完毕而消史。在桟内存。

局部变量必须赋值才能使用。没有默认的初始值。

存放在栈内存

成员变量:定义在类中方法外的变量,属于对象。也叫做实例变量。随着对象的创建而产生,随着对象的回收而消失。在堆内存中。成员变量有默认值。

变量重名时按照就近变量。:先在方法内部找这个变量,找到了就是用,没有找到就去成员范围找。如果还没找到就报错。

参数传递

在调用方法是需要进行参数传递覅。

基本数据类型作为参数传递:把实参的值传递过去 ,,形参的值不影响。

引用类型作为传递:传递的是地地址,形参的改变会影响

可以将多个类,并列的定义到一个.java文件中,public只能加给其中一个,但是建议不使用这种。

匿名对象

没有名字的对象

可以直接调用属性和功能。

可以作为实际参数传递

封裝

封装的好处:隐藏实现的细节,提高了代码的复用性,提高了安全性。

封装的原则:将不需要对外提供的内容都隐藏起来。

private

使用原因:对象.成员变量名=值 这种成员变量值的设置方式不能排除一些不合理现象。

private: 是一个权限修饰符,可以修饰成员变量,也可以修饰成员方法,只能在本类中访问。

是将成员变量用private修饰,提供对应的GET set方法,

get set方法

以后定义一个类时 会把成员变量私有掉。然后提供公共的get set方法,让外界间接的去给成员变量设置值 获取值。

重新打一下手机的代码 使用get set

package com.itheima.demo;

public class ph {

    //定义类的时候将成员变量私有
    private String name;
    private char color;
    private String price;
//setName 命名的规范   set设置
    public void setName(String mz) {
        name = mz;
    }

    public String getName() {
        return name;
    }

    public void setcolor(char ys) {
        color = ys;

    }
//get获取   获取之后再返回主方法中所调用的主方法。
    public char getColor() {
       return color;
    }



    public void show(){
       // System.out.println("名字"+name+"颜色"+color);
    }
    //权限修饰符   状态修饰符  返回值类型  方法名  (形参列表){方法体}
    public void call(){
        System.out.println("打电话");
    }
}
package com.itheima.demo;

public class mytestph {
    public static void main(String[] args) {
    //在ph类里面初始化一个ph方法
        ph ph = new ph();
        //用该方法调用成员属性
        ph.setName("OPPO");
        ph.setcolor('白');


        String name = ph.getName();
        char color = ph.getColor();


        System.out.println(name);
        System.out.println(color);
        ph.show();
          ph.call();

    }

}

权限修饰符:public>protected>缺省的>private;

this代表该类的对象。那个对象调用这个方法 name方法中的this就代表那个对象。

构造方法的格式:

1.创建对象,并且给对象中的成员进行初始化。

2.方法名与类名要相同。

3.没有void,就不需要返回。

构造方法重载的注意事项:

如果我们自己没有定义构造方法,那么系统将自动提供一个无参构造方法。

如果我们给出了有参构造方法,那么系统将不再提供默认的无参构造方法,如果这个时候需要 就要自己给出。

无参构造有参构造打印出老师类

package com.itheima.demo;

import sun.plugin2.message.ShowDocumentMessage;

public class teacher {
    private String name;
    private int age;

    public teacher() {
        System.out.println("空参构造调用");
    }

    public teacher(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造调用");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
package com.itheima.demo;

import sun.plugin2.message.GetNameSpaceMessage;

import java.sql.SQLOutput;

public class mytestth {


    public static void main(String[] args) {
        //空参
        teacher th = new teacher();
        System.out.println(th);
        th.setName("px");
        th.setAge(12);
        System.out.println(th.getAge());
        System.out.println(th.getName());



        //有参
        teacher th1 = new teacher("px",30);
        System.out.println(th1.getName());
        System.out.println(th1.getAge());


    }




}