java中的final关键字、抽象类及接口的定义

final关键字

final:最终的

      final:可以修饰 方法、成员变量、局部变量。

      final  修饰类,则该类不能有子类

final   修饰方法:该方法不能被重写(覆盖)

      final  修饰局部变量,其值不能被改变,即该变量只能被赋值一次;

成为常量(此时变量名通常用大写字母表示,称为字符串常量)。

     final  修饰成员变量:如修饰引用类型成员变量时,则此引用类型变量将不能指向其他对象

举例说明如下:

class TEs
{
	final public void show()
	{
		System.out.println("明天下午我要去跑步");	
	}
}
final class Test//final修饰类:则该类不能有子类
{
	int a,b;
}
/*无法从最终Test进行继承
class Te extends Test
{
	int a;
	String aee;
}
*/
class te extends TEs
{
	/*te中的show()无法覆盖TEs中的show():亦即final修饰的show()方法不能被重写
	public void show()
	{
		System.out.println("周末你要去干嘛呢");
	}
	*/
}
class Demo01
{
	public static void main(String[] args)
	{
		final int num=21;//final修饰局部变量:其值不能被改变
		/*num=45; 无法为最终num分配值*/
		System.out.println(num);
		te t=new te();
		t.show();
	}
}


抽象类及其特点:

关键字 abstract :抽象的

抽象类的定义:再提取父类的过程中,某一个共性方法在子类中各有不同的实现方式,那么该方法就要

修饰为abstract 该类就是抽象类了,此时也要将该类修饰为abstract

抽象类的特点:

(1).抽象方法一定在抽象类中

(2).抽象方法和抽象类都是用关键字abstract

(3).抽象类不能创建对象 即不能实例化

(4).抽象类中的方法要想被使用,必须由子类重写所有的抽象方法,创建子类对象来调用;

如果只是覆盖了部分,会继承父类的抽象方法,那么子类还是抽象类。

(5).抽象类中可以含有非抽象方法和抽象方法、可以没有抽象方法。

例1:写一个抽象类 形状类Shape 里面含有抽象方法 获取面积double getArea() 和周长double getGirth() 

  再分别写两个子类圆:Circle 和 矩形:Rectangle --------(使用键盘录入形状的参数值)

  最后写一个测试类Test  分别实例化一个圆和矩形对象,计算它们的周长和面积。

import java.util.Scanner;//导入java.util包下的Scanner类
abstract class Shape//创建抽象类Shape
{
	public abstract double getArea();//这是描述获取面积的抽象方法
	public abstract double getGirth();//这是描述获取周长的方法
}
class Circle extends Shape//定义了Circle 继承 Shape类
{
	public static final double PI=Math.PI;//通过Math类获取圆周率
	private double radius;
	public void setRadius(double radius)//给半径赋值的方法
	{
		if(radius<=0)
			System.out.println("数据不合法");
		else
			this.radius=radius;
	}
	public double getRadius()//获取半径值得方法
	{
		return radius;
	}
	public double getArea()//重写抽象类Shape中的抽象方法
	{
		return PI*radius*radius;
	}
	public double getGirth()
	{
		return 2*PI*radius;
	}
}
class Rectangle extends Shape
{
	private double length;
	private double width;
	public void setLength(double length)
	{
		if(length<=0)
			System.out.println("数据不合法");
		else 
			this.length=length;
	}
	public double getLength()
	{
		return length;
	}
	public void setWidth(double width)
	{
		if(width<=0)
			System.out.println("数据不合法");
		else 
			this.width=width;
	}
	public double getWidth()
	{
		return width;
	}
	public double getArea()
	{
		return length*width;
	}
	public double getGirth()
	{
		return (length+width)*2;
	}
}
class Test//这是测试类
{
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);//创建键盘录入对象
		System.out.println("请输入圆的半径r");//提示输入
		double r=sc.nextDouble();//存储录入值
		System.out.println("请输入矩形的长x");
		double x=sc.nextDouble();
		System.out.println("请输入矩形的宽y");
		double y=sc.nextDouble();
		Circle c=new Circle();//创建圆的对象
		c.setRadius(r);//通过对象调用赋半径值得方法给半径赋值
		System.out.println("半径r="+c.getRadius()+","+"面积S="+c.getArea()+"周长C="+c.getGirth());
		
		System.out.println("----------------------------------------------------------------------");

		Rectangle rec=new Rectangle();
		rec.setLength(x);
		rec.setWidth(y);
		System.out.println("长x="+rec.getLength()+"宽y="+rec.getWidth()+","+"面积S="+rec.getArea()+"周长C="+rec.getGirth());
	}
}


关键字final和abstract的区别

 final 修饰的方法不能被重写,abstract修饰的方法必须要重写。

补充:

private 修饰的方法不能被重写,abstract修饰的方法必须要重写。

static 修饰的方法可以直接用类名调用,abstract修饰的不能。


接口的定义和使用

什么是接口:

接口是个特殊的抽象类,当抽象类中的方法全部是抽象的,那么该抽象类就可以通过关键字 abstract 

来修饰即通过接口来定义。

接口的定义形式:

 interface  接口名

         {

public static final  数据类型  变量字母大写名 = 变量值;//全局常量

public abstract  返回值类型  方法名(类型1  参数1,类型2  参数2...) ;//抽象方法

     }

 由此可见,接口的修饰符是固定的。

 接口的特点:

 (1).接口中的所有方法都是抽象的,所有属性都是常量

  (2).一个类可以同时实现多个接口即接口允许多实现

  (3).接口与接口之间允许多继承

知识拓展:

类与类之间是继承关系

类与接口之间是实现关系

接口与接口之间是继承关系

举例:

interface inter1//定义接口inter1
{
	public static final int NUM=666;//定义字符串常量的值
	public abstract void show();//定义抽象的方法
}
interface inter2//定义接口inter2
{
	public abstract void show();
}
class Test implements inter1,inter2//定义实现接口inter1和inter2(implements:实现)的Tst类
{
	public void show()//重写抽象方法show()
	{
		System.out.println("Hello");
	}
}
class DemoInterface
{
	public static void main(String[] args)//main函数:程序运行的入口
	{
		Test test=new Test();//创建对象test
		test.show();//通过对象访问成员函数
		System.out.println(test.NUM);//输出(通过对象访问接口inter1中的NUM)
		System.out.println(Test.NUM);//通过类名访问
		System.out.println(inter1.NUM);//通过接口名访问
	}
}


接口的好处:它对外暴露规则,提高了程序的扩展性。






猜你喜欢

转载自blog.csdn.net/RYJ359/article/details/75949263
今日推荐