java系列-面向对象设计

面向对象设计

面向对象的设计思想是当今软件设计领域应用最为广泛的设计思想,它解决了面向过程的设计无法适应大规模软件开发的问题,可以有效的将问题进行划分和隔离。

基本特点

  • 封装;
  • 继承;
  • 多态;

设计原则

  • 开闭原则:对扩展开发,对修改关闭;
  • 里式替换原则:父类出现的地方,可以直接用子类替换;
  • 依赖倒置原则:面向接口、面向父类编程;
  • 单一职责原则;
  • 接口隔离原则;
  • 最少知道原则;
  • 合成复用原则:多用组合、聚合,少用继承;

类定义

//declear package
package com.test;
public class Employee {
    //declear field
    private String name;
    private int age;

    //constructor
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //method 
    public String getName() {
        return this.name;
    }

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

包是java中的一种低级封装模式,通过包声明就可以把一个类放在某个包下,从而实现类的第一层隔离。在声明类的时候叶可以不指定包声明,但通常不推荐这么做。

在java中使用包的场景有两个,一个是将当前类声明到某一个包下,另外就是导入其他包中的类,而在导入类时又分为类导入和静态导入。

//在头部导入
import java.utils.Date;
//在使用时导入
java.utils.Date date = new java.utils.Date();

//静态导入,可以导入类中的静态方法,使用更方便
import static java.lang.System.*;

类用class关键字来声明,一个类的名称可以和所在文件名称不同,但一般不会这么做,类名由字母、数字、下划线、$组成,但不能以数字开头。

成员变量是类对数据的封装,方法是类对外提供的行为或能力,即一个功能点,在方法中往往包含了对数据的数据过程,类不应该直接将内部数据和数据处理过程暴露给使用者。

类中如果定义了多个构造函数,可以通过this关键字进行互相调用。成员方法也可以通过重载的方式来实现扩展,所谓重载就是方法名称相同,但方法参数列表不同的方法(参数类型、个数、顺序不同)。

变量和方法还可以通过static声明为静态的,静态变量一般会作为常量存在,例如:

public static final int MAX_VAL = 1000;

而静态方法一般用来声明工具方法,例如Collections和Arrays中提供的工具方法都是静态方法。

继承

 

public class Person {
    protected String name;
    protected int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void sayHello() {
        System.out.println("hello," + name);
    }
}

//declear subclass
public class Employee extends Person {
    private String no;
    public Employee(String name, int age, String no) {
        //invoke super class constructor
        super(name, age);
        this.no = no;
    }
    
    //override super class method
    public void sayHello() {
        System.out.println(no + ", hello, " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        //
        Person person = new Employee();
    }
}

如果希望类不会被继承或方法不会被重写,可以将类或方法声明为final的,java类库中的一些核心类为了保证代码的安全性,都被声明为了final,比如String。

继承是实现多态的基础之一,在使用多态时就会涉及到强制类型转换,这种转换即可以向下转也可以向上转。

Person person = new Employee();
Employee emp1 = (Employee)person;
Person person2 = (Person)emp1;

在使用继承的模式构建软件系统时,抽象类是最常用的模式,抽象类就是具有抽象方法的类,一般用抽象类类定义程序的骨架,然后用子类加多态的方式来动态的扩展软件系统,比如常用的Spring开发框架中就使用的大量的抽象类来保证软件的可扩展性。

在java中,Object是所有类的默认父类

在Object中提供了与等待/通知、对象析构、克隆、等值判断、打印等方法,其中equals/hashCode和toString是在日常开发中会经常涉及的三个方法。

  • equals:比较两个对象是否相等,默认比较对象的内存地址;
  • hashCode:返回对象的哈希值,默认调用native方法;
  • toString:返回对象的字符串打印值,默认打印对象地址; 

接口

 

接口在java中一般用来定义行为,如果某个对象想要具有某个接口的行为,就直接实现这个接口。接口中的方法是public abstract的,成员变量是public static final 的,在使用时要注意。

另外在java8中引入了接口方法的默认实现,即可以为接口方法提供默认的实现逻辑。

public interface Walk {
    default void walk() {
        System.out.println("walk");
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo20222022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值