黑马程序员——面向对象(final关键字、抽象类、模版方法、接口)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


final: 最终。作为一个修饰符。

特点:

1、可以修饰类,函数,变量。

2、被final修饰的类不可以被继承。避免被继承,被子类复写。提高类的封装性。

3、被final修饰的方法不可以被复写。

4、被final修饰的变量是常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。

当描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。

方便于阅读。而这个值不需要改变,所以加上final修饰。

5、内部类只能访问被final修饰的局部变量。

如:public static final double PI = 3.14;

作为常量:常量的书写规范所有字母都大写,如果由多个单词组成。单词间通过_连接。

5、内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。


目前类的修饰符只有两个: public 和final。



抽象


当多个类中出现相同功能,但是功能主题不同。

这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体。


抽象类的特点:

1、抽象方法一定在抽象类中。

2、抽象方法和抽象类都必须被abstract关键字修饰。

3、抽象类不可以用new创建对象。因为调用抽象方法没意义。

4、抽象类中的方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。

如果子类只覆盖了部分抽象方法,那么还是一个抽象类。


注意:含有抽象方法的类一定是抽象类。


抽象类使用举例:

<span style="font-size:18px;">abstract class  Student
{
	abstract void study();
}

class BaseStudent extends Student
{
	void study()
	{
		System.out.println("base study");
	}
}

class AdvStudent extends Student
{
	void study()
	{
		System.out.println("adv study");
	}
}</span>
与一般类区别:
抽象类比一般类多了个抽象函数。就是在类中可以定义抽象方法。

抽象类不可以实例化。


特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。



模版方法设计模式:

知识点: final和abstract应用。

<span style="font-size:18px;">/*
 * 需求:获取一段程序运行时间。
 * 原理:获取程序开始和结束的时间并相减。
 * 
 * 获取时间:System.currentTimeMillis();
 * 
 * 当代码完成优化后,就可以解决这类问题。
 * 这种方式,模版方法设计模式。
 * 
 * 什么是模版方法呢?
 * 在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用
 * 
 * 
 */
abstract class GetTime
{
	//final  避免被复写
	public final void getTime()
	{
		long start = System.currentTimeMillis();
		
		runcode();
		
		long end = System.currentTimeMillis();
		System.out.println("毫秒:"+(end - start));
	}
	//暴露不确定的方法
	public abstract void runcode();
}

class SubTime extends GetTime
{
	public void runcode()
	{
		for(int x =0 ; x<1000;x++)
			System.out.println(x);
	}

}

public class TemplateDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		GetTime gt = new SubTime();
		gt.getTime();
	}

}
</span>


接口

抽象类中的方法可以全是抽象方法,也可以只有一部分是抽象方法。

而接口中全是抽象方法。

class用于定义类

interfere 用于定义接口


接口定义格式特点:

1、接口中常见定义:常量,抽象方法。

2、接口中的成员都有固定修饰符。只有写入了接口中的元素就会加入固定的修饰符。

常量:public static final

方法:public abstract

写程序的时候尽量写全,便于程序阅读:

public static final int NUM = 3;

public abstract void show();


注意: 接口中的成员都是public的。


接口是不可创建对象的,因为有抽象方法。

需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。

否则子类是一个抽象类。


<span style="font-size:18px;">interface Inter
{
	public static final int NUM = 3;
	public abstract void show();
}

 class Test implements Inter
{
	public void show() {}
}
 
public class InterfaceDemo {

	public static void main(String[] args) {
		Test t = new Test();
		System.out.println(t.NUM);
		System.out.println(Test.NUM);
		System.out.println(Inter.NUM);
		//Inter 只要一被加载Num就存在,所以这三句都正确。
	}

}
</span>


接口可以被类多实现,也是对多继承的不支持形式的转变,可以多实现。

因为接口没有方法主体,方法可以由子类任意定义。


类与类之间是实现关系,类与接口之间是实现关系。接口与接口之间是继承关系。

java支持接口与接口之间的多继承。

<span style="font-size:18px;">interface A
{
	void methodA();
}
interface B 
{
	void methodB();
}
interface C extends B,A
{
	void methodC();
}

class D implements C
{
	public void methodA(){}
	public void methodC(){}
	public void methodB(){}
}
</span>


接口的作用:用于体系以外的功能扩展。

基本功能定义在类中,扩展功能定义在接口中。

例如:

运动员类都有运动的功能,而不一定具备学java的功能。

所以运动的功能定义在类中,学java的功能定义在接口中。



-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值