java基础之 面向对象

学习java最核心最重要的就是要理解面向对象

以对象为基础点,把对象拆开就是学习java一个一个的知识点,把对象进行扩展探寻对象之间的关系就是学习java代码的对象之间的关系,设计模式。

面向对象特性

要理解面向对象,就要理解面向对象里面的三个核心思想:

  • 封装
  • 继承
  • 多态

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在封装的抽象数据类型内部,尽可能隐藏其内部的细节,只保留一些对外接口与外部发生联系。使用者不需要知道对象内部的细节,通过对象对外提供的接口来访问这个对象。

示例:封装一个Person对象

public class Person {

    private String name;
    private int sex;
    private int age;

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex == 0 ? "man" : "woman";
    }

    public void work() {
        if (18 <= age && age <= 65) {
            System.out.println(name + " is working very hard!");
        } else {
            System.out.println(name + " can't work any more!");
        }
    }
}

继承 

继承就是 IS-A 的关系 ,如Dog is a Animal,因此,Dog可以继承来自Animal的非private的属性和方法。

class Dog extends Animal {}

多态

多态分为 编译时多态运行时多态

编译时多态主要指的是方法重载

运行时多态指在代码运行期间才能确定对象引用所指向的具体类型(向上转型)

运行时多态示例:

/**
* 父类:Instrument
*/
public class Instrument {
    public void play() {
        System.out.println("Instrument is playing...");
    }
}

/**
* 子类:Wind 
*/
public class Wind extends Instrument {
    public void play() {
        System.out.println("Wind is playing...");
    }
}

/**
* 子类:Percussion 
*/
public class Percussion extends Instrument {
    public void play() {
        System.out.println("Percussion is playing...");
    }
}

public class Music {
    public static void main(String[] args) {
        List<Instrument> instruments = new ArrayList<>();
        instruments.add(new Wind());
        instruments.add(new Percussion());
        for(Instrument instrument : instruments) {
            instrument.play();
        }
    }
}

在代码实际运行时,调用play()方法会执行父类对象实际引用的子类对象的play()方法。

类图

看懂别人画的类图:学习人家写代码运用的模式结构和逻辑思维

自己动手画类图:能够在写代码的时候有清晰的条理逻辑

画类图的网站:传送门

泛化(继承)关系

 子类继承父类,在java中使用extends关键字

@startuml

title Generalization

class Vehical
class Car
class Train
class Aircraft


Vehical <|-- Car
Vehical <|-- Train
Vehical <|-- Aircraft

@enduml

实现关系

 用来实现接口,java中使用implements关键字

@startuml

title Realization

interface MoveBehavior
class Fly
class Run
class Swim

MoveBehavior <|.. Fly
MoveBehavior <|.. Run
MoveBehavior <|.. Swim

@enduml

聚合关系

整体由部分组成,但是整体和部分不是强依赖,整体不存在了部分还是会存在。

@startuml

title Aggregation

class Computer
class Keyboard
class Mouse
class Screen

Computer o-- Keyboard
Computer o-- Mouse
Computer o-- Screen

@enduml

组合关系

整体和部分之间是强依赖,整体不存在了部分也不存在(公司和部门之间的关系)。

@startuml

title Composition

class Company
class DepartmentA
class DepartmentB
class DepartmentC

Company *-- DepartmentA
Company *-- DepartmentB
Company *-- DepartmentC

@enduml

关联关系

对象之间的对应,1对1,1对多,多对多

@startuml

title Association

class School
class Student
class Subject

School "1" - "n" Student
Student "1" - "n" Subject

@enduml

依赖关系

比如:汽车的启动依赖引擎的启动

class Car {
    Engine engine;
    
    void start() {
        engine.start();
    }
}

class Engine {
    void start() {
        // 启动引擎的逻辑
    }
}

一种较弱的关联关系,表示类的实现依赖于另一个类的接口或者方法。

@startuml

title Dependency

class Vehicle {
    move(MoveBehavior)
}

interface MoveBehavior {
    move()
}

note "MoveBehavior.move()" as N

Vehicle ..> MoveBehavior

Vehicle .. N

@enduml

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值