final
在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。
final标记的类不能被继承。提高安全性,提高程序的可读性。
String类、System类、StringBuffer类
final标记的方法不能被子类重写。
Object类中的getClass()。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
final标记的成员变量必须在声明的同时或在每个构造方法中或代码块中显式赋值,然后才能使用。
public final class Test{
public static int totalNumber = 5 ;
public final int ID;
public Test(){
ID = ++totalNumber; //可在构造方法中给final变量赋值
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.ID);
final int I = 10;
final int J;
J = 20;
J = 10; //非法
}}
抽象类
用abstract关键字来修饰一个类时,这个类叫做抽象类;
用abstract来修饰一个方法时,该方法叫做抽象方法。
抽象方法:只有方法的声明,没有方法的实现。以分号结束:abstract int abstractMethod( int a );
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化。抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。
abstract class A{
abstract void m1( );
public void m2( ){
System.out.println("A类中定义的m2方法");
}
}
class B extends A{
void m1( ){
System.out.println("B类中定义的m1方法");
}
}
public class Test{
public static void main( String args[ ] ){
A a = new B( );
a.m1( );
a.m2( );
}
}
接口
有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
接口(interface)是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
实现接口类:
class SubClass implements InterfaceA{ }
一个类可以实现多个接口,接口也可以继承其它接口。
接口的特点:
用interface来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造器。
接口采用多层继承机制。
接口定义举例
public interface Runner {
int ID = 1;
void start();
public void run();
void stop();
}
实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。否则,仍为抽象类。
接口的主要用途就是被实现类实现。(面向接口编程)
与继承关系类似,接口与实现类之间存在多态性
定义Java类的语法格式:先写extends,后写implements
< modifier> class < name> [extends < superclass>]
[implements < interface> [,< interface>]* ] {
< declarations>*
}
接口方法模拟电脑开关机
package com.java;
public interface USB {
public void On();
public void Off();
}
package com.java;
public class KeyBoard implements USB {
@Override
public void On() {
System.out.println("启动键盘");
}
@Override
public void Off() {
System.out.println("关闭键盘");
}
}
package com.java;
public class Mouse implements USB {
@Override
public void On() {
System.out.println("鼠标启动");
}
@Override
public void Off() {
System.out.println("鼠标关闭");
}
}
package com.java;
public class Computer {
private USB[] usbArr=new USB[4];
//添加usb设备
public void add(USB usb) {
for(int i=0;i<usbArr.length;i++)
{
if(usbArr[i]==null)
{
usbArr[i]=usb;
break;
}
}
}
//电脑开机
public void powerOn() {
//1.开启usb设备接口
for(int i=0;i<usbArr.length;i++)
{
if(usbArr[i]!=null) {
usbArr[i].On();
}
}
//2.电脑开机
System.out.println("开机成功");
}
//电脑关机
public void powerOff() {
//1.关闭usb设备
for(int i=0;i<usbArr.length;i++)
{
if(usbArr[i]!=null) {
usbArr[i].Off();
}
}
//2.电脑关机
System.out.println("关机成功");
}
}
package com.java;
public class Tast {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建电脑对象
Computer com=new Computer();
//像电脑中添加usb设备
com.add(new Mouse());
com.add(new KeyBoard());
//电脑开机
com.powerOn();
System.out.println();
//电脑关机
com.powerOff();
System.out.println();
}
}