java 抽象内部类创建,Java(14):面向对象、封装、继承、方法重写、多态、抽象类与接口、内部类...

面向对象

面向对象编程(Object-Oriented Programming,OOP)的本质:

以类的方式组织代码,以对象的组织(封装)数据。

使用new关键字创造对象

使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的,并且构造器有以下两个特点:

必须和类的名字相同。

必须没有返回类型,也不能写void。

![init]()

> idea中 alt+insert 快速生成构造器代码,值得一提的是,构造器可以重载,如上图。

![have_a_look]()

application:是脚本名。

封装

简单的说,封装就是属性私有,然后实现get/set方法获取/设置属性。

属性私有:private关键字

> idea中 alt+insert 快速生成get/set代码.

继承

在Java中,所有的类默认直接或间接继承object类,只有单继承,没有多继承。

extends关键字

private修饰的属性不能被继承。

> idea中 ctrl+H 浏览当前类的继承树.

首先看下列代码,本类中的构造方法可以通过this([参数])来调用重载的其他构造方法,如图:

![有参调用无参构造方法]()

其次,子类可以显式的调用父类的构造方法(通过super([参数])),和this()一样,必须方法首行。

![super]()

由于this([参数])和super([参数])都必须要在第一行,因此两个方法不能同时出现。

总结:

this:对象本身,没有继承也可以使用。

super:代表父类对象的引用,只能在继承条件下使用。

this():本类的构造。

super():父类的构造。

方法的重写

重写需要有继承关系,子类重写父类的方法:

方法名必须相同。

参数列表必须相同。

修饰符,范围可以扩大但是不能缩小:public > protected > default(什么都不写) > private

抛出的异常:范围不能扩大,但是可以缩小。

方法的重写只和非静态方法有关,比如下面的代码:

Studens继承Person,他们都一个名字和参数相同的static方法,执行实例化,如下:

![静态重写]()

接着,去掉static ,再次执行代码,发现结果不一致,调用的都是子类的test():

![非静态重写]()

最后,一知半解的override修饰符。

![override]()

多态

即同一个方法可以根据发送对象的不同而采用多种不同的行为方式.

比如: Father f = new Son(); 这是多态。

一个对象的类型是确定的,但可以指向对象的引用的类型有很多。

存在条件:

有继承关系。Father Son

子类重写父类方法。 static方法(属于类,不属于实例)、final: 常量的 被这个修饰不能被改变、private方法不能被重写。

父类引用指向子类对象。Father f = new Son();

注意:多态是方法的多态,没有属性的多态。

![fs]()

父类型不能调用子类独有的方法:

![course]()

如果一定要调用,需要将父类强制转换为子类:

![classTransf]()

instanceof

判断一个对象是什么类型,用法:obj instanceof Class。

把子类转换为父类是由低到高转换,不需要强制转换,但是需要注意可能会丢失本来自己的一些方法,转换方式比如:Father obj = 子类对象;

把父类转换成子类,由高到低需要强制转换。

抽象类与接口

普通类:只有具体的实现。

抽象类:实现和规范(抽象方法)都有。

接口:只有规范。

抽象类

抽象类的所有方法,继承它的子类都要实现它,除非它也是一个抽象类

// abstract 抽象类

public abstract class Action{

// abstrcat,抽象方法,只有方法的名字,没有方法的实现。必须在抽象类中。

public abstract void doSomething();

}

抽象类不能new, 只能靠子类去实现它。抽象方法必须在抽象类中。

接口

作用:约束和规范。不能被实例化,没有构造方法。implements实现接口。

第一个接口:

// interface 定义的关键字

public interface InterfSsm{

// 常量 public static final 一般不在接口定义常量

int AGE = 99;

// 接口中的方法默认都省略 public abstract

void run(String name);

}

接口的实现:

// implements关键字

// 必须实现接口中的方法,且参数要一致

public class Application implements InterfSsm{

@Override

public void run(String name) {

System.out.println(name);

}

}

再来一个接口,实现多接口继承:

public interface InterPyy {

void sing();

}

public class Application implements InterfSsm,InterPyy{

@Override

public void run(String name) {

System.out.println(name);

}

@Override

public void sing(){

System.out.println("song");

}

}

内部类

在类中定义一个类。

![InnerClass]()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值