面向对象

1.面向对象

在学习面向对象之前,我们可以先了解一下面向过程。面向过程是一种思想,意思是我们要做任何事,都需要亲力亲为,强调的是过程。
面向对象也是一种编程思想,相对于面向过程,我们可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。

2.面向对象的三大特征

  1. 封装: 把相关的数据封装成一个“类”组件
  2. 继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
  3. 多态: 增强软件的灵活性和重用性

3.类和对象

3.1类
Java语言最基本单位就是类,类似于类型。
类是一类事物的抽象。
可以理解为模板或者设计图纸。
3.2 对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。

对象的状态用来描述对象的基本特征。
对象的行为用来描述对象的功能。
对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
类是一类事物的抽象,对象是具体的实现。
3.3 类和对象的关系
计算机语言来怎么描述现实世界中的事物的? 属性 + 行为
那怎么通过java语言来描述呢?
我们可以通过类来描述一类事物,用成员变量描述事物的属性,用方法描述事物的行为

4.类的创建使用

package cn.tedu.oop;
/**本类用于面向对象入门案例*/
/**在一个java文件中可以写多个class,但是被public修饰的class只能有一个
 * 而且这个公共类的名字要求就是当前文件的名字*/
public class TsetCreateClass {
    public static void main(String[] args) {
        //4.通过new关键字创建对应类的对象
        Phone p = new Phone();//p保存的新对象的地址值
        //5.通过创建好的对象使用类中功能
        p.call();
        p.message();
        p.video();
        //6.通过创建好的对象查看属性值
        System.out.println(p.brand);
        System.out.println(p.price);
        System.out.println(p.color);
        System.out.println(p.size);
        //7.通过new关键字创建手机类的第二个对象
        Phone p2 = new Phone();
        System.out.println(p2);//cn.tedu.oop.Phone@4554617c
        //8.通过p2对象调用Phone类的3个功能
        p2.video();
        p2.message();
        p2.call();
        //9.给p2对象的属性赋值并查看
        p2.brand = "HUAWEI";
        p2.price = 8888.8;
        p2.size = 6.7;
        p2.color = "贝母白";
        System.out.println(p2.brand);
        System.out.println(p2.price);
        System.out.println(p2.size);
        System.out.println(p2.color);
    }
}
//1.通过class关键字创建手机类----用来描述手机这一类事物---设计图纸
//类是一类事物的抽象,用来描述这一类事物的特征与行为
class Phone{
    //2.定义手机的特征(属性)--类的成员变量来描述--定义在类里方法外的变量
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色

    //3.定义手机的功能--类的方法来描述--修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信~");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

5.练习2:创建多个对象

package cn.tedu.oop;
/**本类用于面向对象巩固案例*/
public class TestCat {
    public static void main(String[] args) {
        //4.创建小猫类对象
        Cat c1 = new Cat();
        //5.通过创建好的对象调用功能
        c1.jump();
        c1.miaoMiao();
        //6.创建小猫类对象2
        Cat c2 = new Cat();
        //7.通过创建好的对象调用功能
        c2.jump();
        c2.miaoMiao();
        //8.分别给两个对象的属性赋值并查看
        c1.name = "泡泡";
        c1.age = 28;
        c1.hosts = "泡泡老师1";
        c2.name = "小泡";
        c2.age = 26;
        c2.hosts = "泡泡老师2";
        System.out.println(c1.name);
        System.out.println(c1.age);
        System.out.println(c1.hosts);
        System.out.println(c2.name);
        System.out.println(c2.age);
        System.out.println(c2.hosts);
    }
}


//1.通过class关键字描述小猫这一类事物
class Cat{
    //2.属性
    String name;//姓名
    int age;//年龄
    String hosts;//主人

    //3.功能
    public void jump(){
        System.out.println("小猫Cat跳的高");
    }
    public void miaoMiao(){
        System.out.println("小猫喜欢喵喵叫");
    }
}

6.封装

概述

封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
好处:

  1. 提高安全性
  2. 提高重用性

private关键字

是一个权限修饰符 ,可以用来修饰成员变量和成员方法.被私有化的成员只能在本类中访问

7.练习:封装的必要性

package cn.tedu.oop;
/**本类用于测试封装的必要性*/
public class TestPrivate1 {
    public static void main(String[] args) {
        //3.创建对象修改属性值
        User u = new User();
        u.name = "葫芦娃";
        System.out.println(u.name);
//        u.money = 100000;
//        System.out.println(u.money);
        //6.调用查看余额的方法,获取money的值,并打印在控制台
        System.out.println(u.getMoney());
        //7.1调用设置余额的方法,设置余额99999
        u.setMoney(99999);
        //7.2设置完,通过获取money的方法再次查看余额,并打印
        System.out.println(u.getMoney());
    }
}

//1.创建一个用户类
class User{
    //2.定义用户类的属性
    public  String name;//姓名
    //4.为了更安全的操作余额,修改money的修饰符为private
    /**被private修饰的资源只能在本类中使用*/
    private double money=10000;//账户余额
    //5.1提供公共的方法供外界调用,方法的功能:获取余额
    public double getMoney(){
        /**如果方法的返回值类型不是void,
         * 就需要使用return关键字返回对应类型的返回值*/
        return money;
    }
    //5.2提供公共的方法供外界调用,方法的功能:修改余额
    public void setMoney(double newMoney){
        /**后续可以添加权限的校验*/
        money = newMoney;//将调用方法时传入的值newMoney设置成员变量money

    }
}

8.练习:封装学生案例

package cn.tedu.oop;
/**本类用于继续测试面向对象的第一大特性--封装*/
public class TestPrivate2 {
    public static void main(String[] args) {
        //4.创建学生类的对象
        Student s = new Student();
        //5.通过对象操作学生类的属性与方法
        System.out.println(s.name);//null
        s.study();
        //6.1通过对象修改属性的值,并打印
//        s.subject = "Java培优";
//        System.out.println(s.subject);
        //6.4设置科目为cgb,并查看科目
        s.setSubject("CGB");
        System.out.println(s.getSubject());
        //7.3调用get与set方法操作被封装的属性
        s.setSno(1811024109);
        System.out.println(s.getSno());
    }
}


//1.使用class关键字描述学生这一类型
class Student{
    //2.学生属性:学号  姓名 科目
    private int sno;
    String name;
    //6.2使用private修饰subject,并封装
    private String subject;
    //7.2添加被封装属性的get和set方法
    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }
    //6.3添加属性对应的get和set方法
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }

    //3.定义学生的功能:学习  吃饭  睡觉
    public void study(){
        System.out.println("学java");
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public  void sleep(){
        System.out.println("睡觉");
    }

        }

9.拓展:OOP综合练习

package cn.tedu.oop;
/**本类用于面向对象的巩固练习*/
public class TestCar {
    public static void main(String[] args) {
        //4.创建汽车类对象
        Car c = new Car();
        //5.设置创建好的对象的属性值
//        c.brand = "BMW";
//        c.color = "活力橙";
//        c.price = 400000;
//        c.length = 498;
        //6.查看刚刚设置的属性的赋值
//        System.out.println(c.brand);
//        System.out.println(c.color);
//        System.out.println(c.price);
//        System.out.println(c.length);
        //7.3操作set方法给所有属性赋值
        c.setBrand("奔驰");
        c.setColor("活力红");
        c.setPrice(500000);
        c.setLength(500);
        //7.4操作get方法查看属性的赋值是否成功
        System.out.println(c.getBrand());
        System.out.println(c.getColor());
        System.out.println(c.getPrice());
        System.out.println(c.getLength());
        //8.通过创建好的对象调用汽车类的功能
        c.start();
        c.stop();
    }
}


//1.抽象汽车这类事物的共同点,用class描述
class Car{
    //2.属性--用成员变量描述
    //7.1封装所有属性
    private String brand;//品牌
    private String color;//颜色
    private double price;//价位
    private double length;//车长


    //3.功能--用方法描述
    public void start(){
        System.out.println("汽车启动了");
    }
    public void stop(){
        System.out.println("汽车停止了");
    }

    //7.2生成所有属性对应的get和set方法
    //brand
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    //color
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    //price
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    //length
    public double getLength() {
        return length;
    }
    public void setLength(double length) {
        this.length = length;
    }
}

你可能感兴趣的:(java)