编程学习Java:类的继承、静态+final修饰+抽象方法+异常处理

上篇中陈述了java基本操作以及类和实例的关系,这篇文章继续深入类相关的知识。

web server:tomcat

所用IDE:eclipse

时间:2018/10/6

01

类:class(继承)

继承:子类继承父类的状态/行为,也可修改/重写父类的状态/行为,并添加新的状态/行为。Java不支持多重继承(多重继承即一个子类对应多个父类),只能是一个子类对应一个父类。

最终运行结果:

值得注意的地方:

子类中可以用super这个关键词调用父类的属性:super(若干传入的参数);

同时可以用super调用父类的方法:super.方法名();

对于调用父类子类的应用程序来说依旧是调用类的属性和方法,只不过要用父类创建实例也要用子类创建另一个实例而已。

PS:super从子类中调用父类的属性和方法,this则是在同一类里调用属性和方法。编写代码时:子类和父类其实可以写在同一个class文件中,也可以分开写在不同的class文件中(如上例)。

02

类:class(静态)

用Static修饰的变量(即属性)和方法(即函数)称为静态变量和静态方法,使其能为类和所有对象(实例)共享

实际上的验证:

非Static变量被不同的对象进行赋值时,是更换了地址指向了新的空间来承载新的赋值操作所给予的新数据——不同对象引用动态变量(即非静态变量),会向内存额外申请一个空间,所以不同对象引用可以有不同的值。

对于静态变量来说被不同对象引用时始终如一,仅覆盖旧数据。——Static能使变量被赋值时地址不会变换而是以最新的赋值操作来覆盖旧的数据。也就是说明static定义的变量,以“时间上最近”的一次赋值为准,而且每个对象都可以直接用其值。

对于静态方法,可以直接用【类名.方法】来引用,不需【对象.方法】这种唯一格式,同样的,【类名.静态变量 】也是如此,不限于【对象.变量】的格式,这种规则的好处是可以充当类似接口的一种,不需要实例化就可以引用。

静态方法只能使用静态变量,无法使用动态变量。

补充解释下术语,下面的术语其实是一个意思:

变量(最规范)——属性(便于理解)

方法(最规范)——行为(便于理解)——函数(格式是函数的格式)

对象(最规范)——实例(便于理解)

03

类:class(final和abstract)

一:final

在声明类、方法、属性时候可用final来修饰(加在访问修饰符前面亦可)。

final标记的类不能被继承

final标记的方法不能被重写

final标记的变量为常量,不能被再次赋值

很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。

二:abstract

abstract修饰的方法称为抽象方法含有抽象方法的类也必须要被修饰成抽象类(也就是说抽象类中既可以有抽象方法也可以有非抽象方法)。

抽象类仅能在继承中发挥作用:作为父类

抽象类不能创建(new)对象,仅能声明对象,创建必须要用实现类来创建。

例子如下:

运行结果如下图:

04

接口:interface

接口是和类同等级的特殊数据类型。

接口中的方法必须全是抽象方法(仅声明,为定义方法实体),接口中没有变量,仅有常量

一个接口可以对应多个父接口(接口支持多重继承)。

例子如下:

能用接口申明对象的情况:对象会传参。如果对象是不传参的,即使显式定义构造方法,但是没法引用任何其他方法(因为接口中只有抽象的方法),这样就没意义了;所以如果对象是不传参,那就得用接口中实现了方法(即非抽象方法)的类来申明和定义。

个人感觉,接口解决了类不支持多重继承的问题,本质上还是在用继承的作用从而达到重载、重写的功能。

05

异常处理:Exception

PS:

在eclipse的run中可以传参给主函数main。

对于java程序:eclipse的工程项目文件夹中src——>bulid文件夹下就是.java对应的.class文件。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181029G1R4RA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券