设计模式之基础篇

在学习设计模式之前,首先要懂得一些基本知识。

一、UML关系

  • 泛化关系
  • 关联关系
  • 依赖关系
  • 实现关系

1、泛化在UML中的泛化就是面向对象程序中:继承extends)。

这里写图片描述

2、关联在UML中的关联就是面向对象程序中:就是通过类(接口)来声明一个中的属性(成员变量)

这里写图片描述

3、依赖在UML中的关联就是面向对象程序中:就是通过类(接口)来声明一个类方法参数,或方法的返回类型。

这里写图片描述

4、实现在UML中的关联就是面向对象程序中:就是一个实现了一个接口

这里写图片描述


二、Java继承

首先将类的继承分为普通类和抽象类这两大继承。而具体的继承又分为属性和方法的继承,以及特殊的static和final修饰造成不同继承结果。

  • 普通类的继承
  • 抽象类的继承

1、普通类的继承

名称父类子类子类可继承
类类型publicpublic~
属性类型public/protected~
属性类型private~
方法类型public/protected~
方法类型private~

1.1 属性继承特点

属性类型和名称相同父类子类子类可继承
属性可用子类对象调用父类中的属性
属性父类属性被子的隐藏,即调用的是子类中的属性

1.2 方法继承特点

方法的声明(类型、参数、名称)相同父类子类子类可继承
方法可用子类对象执行父类中的方法
方法父类方法被子类的覆盖,即执行的是子类中的方法

1.3 其他

1) 子类能继承同一个内,由默认修饰符修饰(default)的成员变量成员方法

2) final和static修饰的属性方法都可以被继承修改;也就是final和static对普通类的属性和方法继承无影响,但是不能被覆盖。

父类 class A

class A {
    int a1 = 1;
    static int a2 = 2;
    final int a3 = 3;

    double f(double x, double y) {
        return x + y;
    }
    static int g(int n) {
        return n * n;
    }
}

子类 class B

class B extends A {
    int a1 = 11;
    static int a2 = 22;
    final int a3 = 33;

    double f(double x, double y) {
        double m = super.f(x, y);
        return m + x * y;
    }
    static int g(int n) {
        int m = A.g(n);
        return 10 + n;
    }
}

测试类 class Test

public class PrintMethod {
    public static void main(String[] args) {
        A a = new B();
        System.out.println("A a1: "+a.a1);
        System.out.println("A a2: "+a.a2);
        System.out.println("A a3: "+a.a3);
        System.out.println("A static g(): "+a.g(3));
        System.out.println("A f(): "+a.f(10, 1));
        System.out.println();
        B b = new B();
        System.out.println("B a1: "+b.a1);
        System.out.println("B a2: "+b.a2);
        System.out.println("B a3: "+b.a3);
        System.out.println("B static g(): "+b.g(3));
        System.out.println("B f(): "+b.f(10, 1));
    }
}

测试结果

A a1: 1
A a2: 2
A a3: 3
A static g(): 9
A f(): 21.0

B a1: 11
B a2: 22
B a3: 33
B static g(): 12
B f(): 21.0

默认修饰符(default):默认的访问权限,也是可以省略的访问权限,它不仅能在设置了该权限的类中访问,也可以在同一包中的类或子类中访问。

2、抽象类的继承

名称父类子类子类可继承
类类型publicpublic~
属性类型public/protected~
属性类型private~
方法类型public/protected~
方法类型private~

1.1 属性继承特点

属性类型和名称相同父类子类子类可继承
属性
属性父类属性被子的隐藏

1.2 方法继承特点

方法的声明(类型、参数、名称)相同父类子类子类可继承
方法
方法父类方法被子类的覆盖

1.3 其他

1) 子类能继承同一个内,由默认修饰符修饰(default)的成员变量成员方法

2) final和static修饰的属性方法都可以被继承修改;也就是final和static对普通类的属性和方法继承无影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值