面向对象中的 代码块 继承 final super 多态 抽象类 接口

今天为10.15日,天气晴朗,适合写博客。
本次博客我们采用思维导图的形式,看上去更加直观,方便。
PS.第一次使用,多多包涵
在这里插入图片描述
以上为本次博客的大纲
当然具体内容在本次博客中会点名
大纲中具体的概念我们就不在重复了
---------------------------------------------------------------------------
一、关于代码块
接下来我们依旧用图片来展示这几种代码块的区别
首先我们定义几个 静态代码块 构造代码块 局部代码块 看看

public class Demo {
    static {
        System.out.println("静态代码块1");

    }
    Demo(){
        System.out.println("构造代码块");
    }

    {
        System.out.println("局部代码块");
    }![在这里插入图片描述](https://img-blog.csdn.net/20181015172343250?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MTE4Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
    static {
        System.out.println("静态代码块2");
    }



    {
        System.out.println("局部代码块2");
    }
}

接下来我们看看运行结果
在这里插入图片描述

很显然静态代码块的优先级最高 其次是局部代码块 最后才是构造代码块

----------------------------------------------------
二、继承
关键字extends
我们依旧使用图片结果来进行说明
这是父类

public class Demo2 {
    int age=10;
    public void show(){
        System.out.println("父类方法");
    }
    public void show2(){
        System.out.println(age);
    }
}

子类

public class Zi2 extends Demo2 {
    int age=20;
}

测试类

public class Test2 {
    public static void main(String[] args) {
        Zi2 zi2 = new Zi2();
        System.out.println(zi2.age);
        zi2.show();
        zi2.show2();
    }
}

运行结果
在这里插入图片描述

通过以上体现了 继承中 子类继承父类的成员方法,以及成员变量,
当然在上图中还体现了 就近原则 在子类使用父类方法时 父类方法先初始化
在zi2.show2中就很好的体现出来 zi2中没有show2方法 通过父类show2方法打印出的age是10不是20

开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力

---------------------------------------------------------------------------------------------
三、关键字super
首先我们需要区分一下 this与super
this 代表的是本类对象的引用
super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
在调用变量以及方法上 就有了区别
super调用都是父类;this调用都是本类

-------------------------------------------------------------------------------------------------------
四、继承中的构造方法
首先我们需要注意:构造方法不参与继承所以我们在使用子类初始化父类时 我们必须初始化父类的无参构造
在注意: **构造方法的第一句默认都是 super();**所提当我们在父类中创建含参构造 (覆盖了无参构造) 我们需要在子类中创建含参构造且在super中添加和父类一样的参数
在这里插入图片描述

在这里插入图片描述
------------------------------------------------------------------------------------
五、方法重写
子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
(@可以用override进行检测)
父类静态方法,子类也必须通过静态方法进行重写
父类的私有方法,子类无法重写

---------------------------------------------------------------------------------------------
六、final关键字
修饰类: 被修饰类不能被继承
修饰方法: 被修饰的方法不能被重写
修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量
此处我就不附图了,比较简单(在void前或基本变量前)

-----------------------------------------------------------------
七、多态
定义同一事物的不同表现形式

前提:要有继承关系。
要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
要有父类引用指向子类对象。

格式: 父 f = new 子();

多态中的成员访问特点
a:成员变量
编译看左边,运行看左边。
b:构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
编译看左边,运行看右边。
d:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)

附图
父类

public class Demo4 {
    static int age1=100;
    int age=10;
    public void show(){
        System.out.println("父类非静态方法");

    }
    public static void show2(){
        System.out.println("父类静态方法");
    }
}


子类

public class Zi4 extends Demo4{
    static int age1=200;
    int age=20;
    public void show(){
        System.out.println("子类非静态方法");
    }
    public static void show2(){
        System.out.println("子类静态方法");
    }
}

运行结果
在这里插入图片描述

注 静态方法推荐类名打点调用。

----------------------------------------------------------------------------
八、抽象类
关键字abstract
抽象类特点
抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?

用于子类访问父类数据时的初始化
抽象类不能直接实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

抽象类可以有构造方法,目的是为了初始化父类

-----------------------------------------------------------------------------
九、接口
关键字 interface
接口用关键字interface表示 格式: interface 接口名 {}

类实现接口用implements表示 格式: class 类名 implements 接口名 {}

接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。

接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

附图演示 抽象类和接口
父类

public abstract class Demo5 {
    int age=10;
    abstract public void show();
    public void show2(){
        System.out.println("父类非抽象方法");
    }

}

接口A

public interface Myinterface1 {
    void Amethod();

}

接口B

public interface Myinterface2 {
    void Bmethod();
}

子类

public class Zi5 extends Demo5 implements Myinterface1,Myinterface2{

    @Override
    public void show() {
        System.out.println("重写后的子类方法");
    }

    @Override
    public void Amethod() {
        System.out.println("接口A中的方法");

    }

    @Override
    public void Bmethod() {
        System.out.println("接口B中的方法");

    }
}

测试结果
在这里插入图片描述

以上就是今天的博客 应该比前几次都好一些(我是这么感觉的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值