上篇中陈述了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文件。
领取专属 10元无门槛券
私享最新 技术干货