面向对象傻傻搞不清楚,有这一篇就够了

1.面向对象概念

首先面向对象是相对于面向过程而言的

面向过程是一种思想,意思是我们要做任何事,都需要亲力亲为,强调的是过程
面向对象oop(Object Oriented Programming)也是一种编程思想,相对于面向过程,我们可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化,强调结果

java是一门面向对象的语言

 

2 面向对象的三大特征

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

3 类和对象

3.1 类

  1. Java语言最基本单位就是类(type,class),类似于类型。
  2. 类是一类事物的抽象。
  3. 可以理解为模板或者设计图纸(汽车图纸)
  4. 例如提到老师类就会想到好多老师,语文数学的老师,要备课上课,批改作业

3.2 对象

(涉及出来的一辆一辆车)

每个对象具有三个特点:对象的状态,对象的行为和对象的标识。

  1. 对象的状态用来描述对象的基本特征。
  2. 对象的行为用来描述对象的功能。
  3. 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来
  4. 类是一类事物的抽象,对象是具体的实现。

总结:类是抽象的,对象是具体的,对象是根据类设计出来的 ,类就像一张汽车模型图纸,而对象就是根据图纸创建一个个具体的小汽车

3.3 类和对象的关系 

  1. 计算机语言来怎么描述现实世界中的事物的? 属性 + 行为
  2. 那怎么通过java语言来描述呢?
    类--描述一类事物;成员变量--描述事物的属性,方法--描述事物的行为.

3.4 练习:类的创建使用 


比如我们要把手机这一类事物抽象成代码:
那么这个事物的类型就是"手机",可以用类来描述.
类中包含的就是手机抽取出来的共性的属性与功能.

手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐

对象:包含特有的成员变量和方法
我们通过class关键字创建类,通过new关键字创建对象。
创建包: cn.tedu.oop
创建类: TestCreateClass.java

package cn.tedu.oop;
//!!!!!!!class要符合驼峰命名规则
//本类用于练习面向对象入门案例
//设计手机事物
/*特性:品牌,价格,尺寸,颜色
功能:打电话,发短息,看直播*/
//在一个java文件中可以创建多个class,但是被public修饰的只能有一个
//而且这个公共类的名字就是文件的名字
public class TestCreatClass {
    //4.创建程序的入口函数
    public  static  void  main(String[] args) {
        //通过new关键字创建对象
        //5.创建手机类对象
        Phone p=new Phone();//第一个Phone是自定义的类型,引用类型,格式类型(与类名相同) 对象名=new 类名
        //6.使用手机的功能
        //我们通过.来调用功能,类似于中文的“的”
    p.call();
    p.message();
    p.video();
    //通过第二个手机类调用方法

    //7.查看对象的属性值,打印出来--Ctrl+D快速向下复制
        System.out.println(p.brand);
        System.out.println(p.color);
        System.out.println(p.price);
        System.out.println(p.size);
        //8.创建第二个手机对象
      Phone P2 =new Phone();
      //9.调用第二个属性的方法
        P2.call();
        P2.message();
        P2.video();
        //10.找到属性值,修改成员变量的值
        P2.brand="小米";
        P2.color="中国红";
        P2.price=99999;
        P2.size=12;
        System.out.println(P2.brand);
        System.out.println(P2.color);
        System.out.println(P2.price);
        System.out.println(P2.size);
    }

    //1.通过class关键字创建一个手机类---描述手机这一类事物

    static 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("看直播");
        }

    }



}

4 封装

4.1 概述

①将一类事物的特征和功能封装成一个“”“类”组件

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

  1. 提高安全性
  2. 提高重用性(方法可以多次使用)

4.2 private关键字

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

创建包: cn.tedu.oop
创建类: TestPrivate.java

TIPS:如何封装?封装后的资源如何访问?
我们可以使用private关键字来封装成员变量与方法
如何访问私有资源?
关于成员变量:
setXxx – 对外提供公共的设置值方式
getXxx – 对外提供公共的获取值方式
关于成员方法:
把私有方法放在公共方法里供外界调用即可

5 拓展:OOP综合练习

创建包:cn.tedu.oop
创建类:TestCar

package cn.tedu.oop;
//本类用于测试面向对象封装
public class TestPrivate {
    public static void main(String[] args) {
        //4.创建对象
        Student s=new Student();
        //5.给对象的属性赋值
        //s.id=1;
       // s.name="sb";
        s.setSubject("语文");
        s.setId(2323);
        s.setName("狗子");
        //s.subject="大数据";
        //6.查看给对象设置的属性值
       // System.out.println(s.id);
       // System.out.println(s.name);
        System.out.println(s.getSubject());
        System.out.println(s.getId());
        System.out.println(s.getName());
        //System.out.println(s.subject);
        //7.通过对象调用功能
        s.play();
        s.study();
    }



}
//1.通过class关键字描述学生这一对象
class Student{
    //1.特征--成员变量
    //9.1封装剩下的两个属性
   private int id;//学号
   private String name;//姓名
    //8.1练习属性的封装--直接在属性前加private,是关键字,小写!!!!!
    /**被private修饰的资源是私有资源
    /私有资源只能在本类使用,外部无法访问*/
  private  String subject;//科目
//关于方法的第四个要素,返回值类型,如果一个方法需要返回结果,那么通过return关键字返回
    //注意返回值类型String必须与返回值subject的类型保持一致
    public String getSubject() {
        return subject;
    }

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    //2.功能--方法
    public void  study(){
        System.out.println("学习呢");
      fly();//  在同类中的公共方法里直接调用这个方法,这样在其他类中可以通过创建对象调用公共方法
    }
    public void play (){
        System.out.println("玩一会");
        fly();
    }
    //
    private void fly (){
        System.out.println("飞一会");
    }





}

6 访问控制符

用来控制一个类,或者类中的成员的访问范围。

面向对象傻傻搞不清楚,有这一篇就够了_第1张图片

TIPS:default是表示不写修饰符,默认,如果写default单词来修饰会报错

拓展7 匿名对象
没有名字的对象,是对象的简化表示形式。
使用场景:
当被调用的对象只调用一次时(多次会创建多个对象浪费内存)
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。
也可以写成:
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法
 

你可能感兴趣的:(基础,面向对象,oop,java)