Java的面向对象编程:接口 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code > Java的面向对象编程:接口

Java的面向对象编程:接口

 

1)接口

⑴:“接口”这个概念:

不要看到这一概念,你就有所畏惧,也不必看到它,你感觉很神秘;生活中的接口非常常见,简单地说,我们用的电源插座,有两相,也有三相;两相只能插两相的电源,三相则同上。还有使用的电脑usb接口,符合规范的U盘或者移动设备,无线网卡则可以插到usb接口上使用。

⑵:程序中的接口

和C#等面向对象的语言大同小异,Java为了也支持所谓的“多重继承”(注:多重继承就是子类可以继承多个父类,在C++中完全支持多重继承),但是Java和C#等不支持“多重继承”,而且“多重继承”在使用的过程中会很乱,无论是在扩展或者维护方面很不方便;Java和C#中的接口,写了一个方法,但具体的方法内容没有去实现,符合这个接口标准的,在不同的地方可以实现不同的方法。说的更直白些,就是未实现方法,这样就完美地解决了代码的可扩展性(可以增加新内容)和维护性(避免去修改之前的代码)。

补充:如果有一个现有的程序提供给你,设计方案也给你,你会选择去修改程序还是再重新自己写一个程序?我想,大多数程序员会选择重新写吧。修改别人的代码需要读懂(每一个人写代码的风格不同),维护起来需要浪费掉很多时间,用这些时间还不如自己重新写一个。。

Java中,实现接口的类使用“implements”这个关键字进行方法的具体实现,语法如下:

	//接口类
	public interface 接口名
	{
		public 类型 未实现接口的方法名();
	}
	//实现接口方法的类
	public class 实现接口方法的类 implements 接口
	{
		public 类型 未实现接口的方法名(){//方法体}
		//实现接口的方法
	}

下面按照要求:

①:学生类Student和学院类School类输出各自的信息。

②:有一个稿纸类Papers,有记录信息的方法。

③:学院可以使用稿纸,对学生的基本信息和学院信息进行记录。

实现的代码在如下的demo中:

demo:

 

package courseOOP3;

/*先定义一个接口 infomationShow,在接口中写一个intro的方法,
 * 等待实现该方法,然后显示详细的信息。*/
public interface InfomationShow {
	public String intro();//等待被实现的方法intro
}

//然后定义一个学生Student类,用来实现intro方法,进行学生的自我介绍。
class Student implements InfomationShow
{
	public String intro()
	{
		return ("你好,我的名字叫Angel,34455,来自中国的东北角——黑龙江");
	}
}

/*接下来写一个稿纸类Papers,
 * 用来记录学生的信息和学院的信息(下一部将会定义一个学院的类)*/
class Papers
{
	public void recordInfo(String content)
	{
		System.out.println(content);
	}
}

/*接上面的稿纸类,定义一个学院的类School,
 * 学院通过稿纸来记录学生或者学院的信息(intro()方法)。*/
class School implements InfomationShow
{
	//先在学院类中同样实现接口的intro方法,用来进行学院信息展示。
	public String intro()
	{
		return ("这里是洛阳理工学院,坐落于美丽的洛河之畔洛阳");
	}
	//使用"学院"中的稿纸的方法,接收接口。
	private Papers paper = new Papers();
	//将接口作为参数传入
	public void recordInfo(InfomationShow infoShow)
	{
		paper.recordInfo(infoShow.intro());
		/*recordInfo()方法中接收的是:
		学院或者学生各自实现接口的intro方法返回的字符串。*/

	}
}

测试类:

 

package courseOOP3;

/*单独地写一个类TestRecord,
 * 用来打印输出学院的稿纸记录方法(记录方法包含了学院信息和学生的自我介绍)*/
public class TestRecord {
	public static void main(String[] args) {
		School sc = new School();
		System.out.println("用学院的稿纸记录学生自我介绍的信息:");
		sc.recordInfo(new Student());
		System.out.println("用学院的稿纸记录学院的概况:");
		sc.recordInfo(sc);
	}
}

在这里,学院School类的recordInfo方法,接受的参数类型“InfomationShow”,对应的类型“InfomationShow”的对象都可以以参数的形式传进去。在运行的过程,会根据对象的不同调用不同的实现方法(和多态很相似)。

2)常量:

⑴:为什么要用常量?

常量是一种标识符,永恒不变,所以只可以被引用而不能给其赋值。

demo1:

 

public final class NumFinal {
	public static final double i = 9.99999;
	public static double num(double j)
	{
		return i * 2 + j;
	}
	public static void main(String[] args) {
		NumFinal nf = new NumFinal();
		System.out.println(nf.num(15.0));
		//i = i -2;
		//i = i -2报错,无法给常量重新赋值
	}
}

⑵:使用常量的优势:

先看demo2中的代码:

demo2:

 

public final class CompareFinal {
	public static double NORMALWAYADD(double num1)
	{
		return (num1 + 9.6456456);
	}
	public static double NORMALWAYDIVIDE(double num2)
	{
		return (num2 / 9.6456456);
	}

	//下面使用常量实现相同的功能
	public static final double NUMFINAL = 9.6456456;
	public static double FINALWAYADD(double num1)
	{
		return (num1 + NUMFINAL);
	}
	public static double FINALWAYDIVIDE(double num2)
	{
		return (num2 + NUMFINAL);
	}
}

可见,后者代码的可读性相对要于前者好得很多,这样也易于维护。

⑶:Java中定义常量的规则:

①:Java在变量声明的时候加入了final关键字,则代表了常量,加入static关键字则代表 类变量;通常情况声明常量,需要将final和static一起使用。

②:使用有含义的常量来表示程序重复出现的数字、字符串:例如,性别等。

③:在接口中使用常量,编译的过程会自动加上修饰符 public static final,自动地声明成公有的常量。

 

或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2010/12/20/java-implements-that-interface-method-and-final-constant.html
 
分类: code标签: , , ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (19) Trackbacks (0)
发表评论 Trackback
 
19 Comments Contributed by Visitors
  1.     Angel 2010年12月20日14:52 11#

    @Mucid

    你太聪明了,嘿嘿;

    其实java和c#都有继承的,这个不多说;

    指针那玩意我听着都怕,学过c语言,,学的一塌糊涂。。 ok

    那个地方的注释写的可能让你误解了,其实是实例化一个papers对象,然后在下面 paper.recordInfo(); 用.操作符调用访问方法,给这个方法里传入方法infoShow.intro(),infoShow.intro()这个方法返回的是字符串String。刚熄灯了手机留言不方便。。

  2.     Mucid 2010年12月20日14:56 12#

    @Angel
    嗯,实例化,可能和构造一个类对象还是有些不同,我过在我看来,也就是格式上不同。我不懂java……对于不理解得语言,总是以c/c++得方式去揣摩呵呵!

  3.     youngsunblog 2010年12月21日05:51 13#

    主题停简练的。。

  4.     花脸猴 2010年12月21日10:56 14#

    稍微懂一点

  5.     Angel 2010年12月21日12:36 15#

    @youngsunblog
    嘿嘿, ok 谢谢支持。

  6.     Angel 2010年12月22日00:50 16#

    @88250
    嘿嘿,谢谢支持;
    以后程序开发的问题还得多向您请教。。。 ok

  7.     冰棱 2010年12月22日10:50 17#

    ok 我都纳闷了,你到底是学啥滴? 嘿嘿! 好久没来了,看看你!

  8.     Rissen 2011年4月22日14:44 18#

    Interface更像是一种标准规范,某个类实现了这个接口就具有这个标准规范所定义的功能。

  9.     Angel 2011年4月25日13:28 19#

    @Rissen
    其实现在的编程很多都是在面向接口编程的 confused

Leave Comments Here...

:) :-D :( :-o 8-O :-? 8) lol :-x :-P oops cry evil twisted wink ? idea :-| arrow mrgreen roll !

(required)

(required)

网址随您("http://"可以省略)

(Ctrl+Enter)

  • 本站不会泄露您的 Email 地址, 敬请放心.
  • 本站已开启缓存, 请不要重复提交评论.
  • 请注意: 带有 《广告(链)、不健康、或者 产品名字》 的评论一律视为spam.
  • 支持常用 HTML 标签调用, 插入 HTML 标签需注意: < == &lt;> == &gt;.
  • 仅当某人针对您的评论做出回应时, 您才会收到由本站发出的邮件通知.
  • 如您希望以相同方式通知某位网友, 请点击  按钮进行回复.
  • 允许在评论中使用如下代码: 
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> 
    <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> 
    .
  • 鼠标悬浮到评论中的 @someone 区域即可自动显示 someone 的评论内容.
 
 
  • 正在加载...