`
tw5566
  • 浏览: 449856 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java基础知识(一)----------(final,抽象类和接口)

    博客分类:
  • java
阅读更多
1.  final 关键字:
   1> final类是不能被继承的.
   2>final标记的方法是不能被子类复写的   
   3>final标记的变量即常量,只能被赋值一次.
 注意: 如果使用final来声明常量,请遵守以下常规: final标记的变量名,所有单词字母都需大写.

2. 抽象类

      讲抽象类的定义必须先讲抽象方法的定义. 所谓抽象方法,是指只声明而未实现(即没有{}包围的方法体)的方法. 而含有一个或多个抽象方法的类就称为抽象类.

      抽象类 = 普通类 + 抽象方法

      对于抽象类,时刻需要谨记: 抽象类是不能够直接实例化的, 如果要使用一个抽象类,就必须要有该抽象类的子类. 如果抽象类的子类不是抽象类的话,就一定要复写该抽象类的所有抽象方法.

      如下面代码示例: 
abstract class Person   
{   
    //全局常量的命名一定要采取全部字母大写的方式   
    public static final String NAME = "newsainton";   
    //print()方法有方法体,所以不是抽象方法   
    public void print()   
    {   
        System.out.println("非抽象方法中,Name = "+NAME);   
    }   
    //fun()方法不含方法体,为抽象方法   
    public abstract void fun();   
}   
//B类继承自A类,但B未声明为抽象类,则必须要复写A类中所有的抽象方法   
class Student extends Person   
{   
    public void fun()   
    {   
        System.out.println("抽象方法中,Name = "+super.NAME);   
    }   
}   
public class Demo01   
{   
    public static void main(String args[])   
    {   
        Student s = new Student();   
        s.fun();   
        s.print();   
    }   
} 

 另外一个需要考虑的问题是: 抽象类可否有自己的构造方法?

      答案是: 抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象. 如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法.

abstract class Person   
{   
    // 应该有姓名和年龄属性   
    private String name ;   
    private int age ;   
    public Person(){}   
    // 如果已经不是无参的,则必须在子类中明确调用无参构造   
    public Person(String name,int age)   
    {   
        this.name = name ;   
        this.age = age ;   
    }   
    public String getName()   
    {   
        return this.name ;   
    }   
    public int getAge()   
    {      
        return this.age ;   
    }   
    // 定义一个输出方法,但是此方法为抽象方法   
    public abstract String getInfo() ;   
}   
class Student extends Person   
{   
    public Student(String name,int age)   
    {   
        // 调用Person类中有两个参数的构造方法   
        super(name,age) ;   
    }   
    public String getInfo()   
    {   
        return "姓名 = "+super.getName()+",年龄 = "+super.getAge() ;   
    }   
}   
public class Demo05   
{   
    public static void main(String args[])   
    {   
        Student s = new Student("张三",30) ;   
        System.out.println(s.getInfo()) ;   
    }   
} 

3. 接口(interface)

   3.1 接口的概念

      接口是抽象方法与常量的结合.

      接口的定义方式为: interface 接口名 { 数据类型 常量名 = 常量值; 返回值类型 方法名(); .......}

      在Java中,一个类只能继承一个类,但是却可以实现(implements)多个接口. 如果实现接口的类不是抽象类的话,则该子类必须复写接口中所有的抽象方法.

      例如如下代码示例:      view plaincopy to clipboardprint?
interface Person   
{   
    //接口中包含了抽象类和抽象方法   
    public static final String NAME = "newsainton";   
    public abstract void fun();   
}   
// 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法   
class Student implements Person   
{   
    public void fun()   
    {   
        System.out.println("name = "+NAME);   
    }   
}   
public class Demo02   
{   
    public static void main(String args[])   
    {   
        Student s = new Student();   
        s.fun();   
    }   
}  
interface Person
{
	//接口中包含了抽象类和抽象方法
	public static final String NAME = "newsainton";
	public abstract void fun();
}
// 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法
class Student implements Person
{
	public void fun()
	{
		System.out.println("name = "+NAME);
	}
}
public class Demo02
{
	public static void main(String args[])
	{
		Student s = new Student();
		s.fun();
	}
} 

   3.2 接口的两点注意之处

       (1). 抽象类使的是extends关键字,表示一个类只能继承一个父类,但是接口使用的是implements,一个类可以同时实现多个接口,但是此时子类就必须同时覆写好多个接口中的抽象方法。

       (2). 既然定义中已经明确说明了接口是抽象方法和全局变量的集合,因此,我们可以如下例一样,对代码进行简化:      view plaincopy to clipboardprint?
interface Person   
{   
    //接口中包含了抽象类和抽象方法   
    //public static final String NAME = "newsainton";   
    public String NAME = "newsainton";   
    //public abstract void fun();   
    public void fun();   
}   
// 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法   
class Student implements Person   
{   
    public void fun()   
    {   
        System.out.println("name = "+NAME);   
    }   
}   
public class Demo03   
{   
    public static void main(String args[])   
    {   
        Student s = new Student();   
        s.fun();   
    }   
}  
interface Person
{
	//接口中包含了抽象类和抽象方法
	//public static final String NAME = "newsainton";
	public String NAME = "newsainton";
	//public abstract void fun();
	public void fun();
}
// 一个类可以继承多个接口,但如果该类不是抽象类的话,则必须实现抽象类中的所有抽象方法
class Student implements Person
{
	public void fun()
	{
		System.out.println("name = "+NAME);
	}
}
public class Demo03
{
	public static void main(String args[])
	{
		Student s = new Student();
		s.fun();
	}
} 

   3.3 接口与接口之间的关系

      一个接口可以使用extends关键字去继承一个或多个已有的接口,但在子类的实现时,也必须全部实现所有接口的抽象方法.

      

      一个接口去继承并实现多个接口的例子如下:      view plaincopy to clipboardprint?
interface A   
{   
    public void printA() ;   
}   
interface B   
{   
    public void printB() ;   
}   
interface C extends A,B   
{   
    public void printC() ;   
}   
class X implements C   
{   
    // 如果实现了(继承)C接口,则在子类中就必须覆写全部的抽象方法   
    public void printA()   
    {   
        System.out.println("A --> HELLO") ;   
    }   
    public void printB()   
    {   
        System.out.println("B --> HELLO") ;   
    }   
    public void printC()   
    {   
        System.out.println("C --> HELLO") ;   
    }   
}   
public class Demo04   
{   
    public static void main(String args[])   
    {   
        X x = new X() ;   
        x.printA() ;   
        x.printB() ;   
        x.printC() ;   
    }   
}  
interface A
{
	public void printA() ;
}
interface B
{
	public void printB() ;
}
interface C extends A,B
{
	public void printC() ;
}
class X implements C
{
	// 如果实现了(继承)C接口,则在子类中就必须覆写全部的抽象方法
	public void printA()
	{
		System.out.println("A --> HELLO") ;
	}
	public void printB()
	{
		System.out.println("B --> HELLO") ;
	}
	public void printC()
	{
		System.out.println("C --> HELLO") ;
	}
}
public class Demo04
{
	public static void main(String args[])
	{
		X x = new X() ;
		x.printA() ;
		x.printB() ;
		x.printC() ;
	}
} 

   3.4 这里,如果一个子类既要继承一个抽象类,又要实现一个接口,该怎么写呢?

      我们采取的是: class 类名称 extends 抽象类 implements 接口 这样的语法格式.

      下面是同时继承一个抽象类,又实现接口的具体实例:      view plaincopy to clipboardprint?
interface X   
{   
    public void printX() ;   
}   
interface Z   
{   
    public void printZ() ;   
}   
// 一个抽象类也是可以实现接口的   
abstract class Y implements Z   
{   
    public abstract void printY() ;   
}   
// D类同时继承Y类和实现X接口   
class D extends Y implements X   
{   
    public void printX()   
    {   
        System.out.println("X --> HELLO .") ;   
    }   
    public void printY()   
    {   
        System.out.println("Y --> HELLO .") ;   
    }   
    public void printZ()   
    {   
        System.out.println("Z --> HELLO .") ;   
    }   
}   
public class Demo13   
{   
    public static void main(String args[])   
    {   
        D d = new D() ;   
        d.printX() ;   
        d.printY() ;   
        d.printZ() ;   
    }   
} 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/newsainton/archive/2009/08/03/4405346.aspx
   
分享到:
评论

相关推荐

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...

    Java基础知识点.html

    Date类 自动拆箱和自动装箱 Arrays 类和接口的关系 内部类 成员内部类 局部内部类 匿名内部类 抽象类 接口 多态 封装 类和对象 方法 StringBuilder类 String类 static for循环 final 权限修饰符 跳转控制语句 while...

    JAVA基础知识精华总结 收藏

    JAVA基础知识精华总结 收藏 1、 对象的初始化 (1) 非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化。 基本类型:int型,初始化为0。 如果为对象:这些对象会按顺序初始化。 ※在...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8...

    java学习笔记 初学者必读

    7.7. 抽象类 7-24 7.8. 接口 (模板方法模式) 7-25 7.9. Object 类 7-27 7.10. 封装类 7-28 7.11. 内部类 7-29 7.11.1. 内部类的分类 7-29 7.11.2. 成员内部类 7-29 7.11.3. 局部内部类 7-30 7.11.4. 静态内部类 7-30...

    Java+Java基础知识+基本概念+运算符+判断和循环+循环高级和数组+方法+综合练习+面向对象+面向对象综合熏硫胺+字符串等

    Java基础知识,其中包括基本概念+运算符+判断和循环+循环高级和数组+方法+综合练习+面向对象+面向对象综合训练+字符串+集合&学生管理系统+学生管理系统升级版+面向对象进阶(static&继承+多态+包&final&权限+抽象类&...

    JAVA基础课程讲义

    序列化涉及的类和接口 162 序列化/反序列化的步骤和实例 162 综合的序列化和反序列化练习 163 JAVA.IO包相关流对象用法总结(尚学堂1002班王鑫) 165 IO中其他常用类 165 File类 165 RandomAccessFile 166 思考作业 ...

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    10.3 线程的基础知识 200 10.4 创建Java的线程 201 10.4.1 实现Runnable接口来创建线程 201 10.4.2 继承Thread类来创建线程 204 10.5 集合对象简介 205 10.5.1 Java Collections Framework 206 10.5.2 ...

    corejavaNoteBook

    7.7. 抽象类 7-24 7.8. 接口 (模板方法模式) 7-25 7.9. Object 类 7-27 7.10. 封装类 7-28 7.11. 内部类 7-29 7.11.1. 内部类的分类 7-29 7.11.2. 成员内部类 7-29 7.11.3. 局部内部类 7-30 7.11.4. 静态内部类 7-30...

    AIC的Java课程1-6章

    第5 版 清华大学出版社  “SCJP学习指南” 人民邮电出版社  “Java 编程思想” 第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 ...

    day14-面向对象-多态&final&抽象类

    小白新人,基础java知识分享

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    跟汤老师学Java(第9季):抽象类和接口

    本课程从零开始,以通俗易懂的方式讲解Java入门,手把手教你掌握每一个知识点,真正做到零基础入门学习,最适合初学者的教程!课程内容包括:1.final关键字2.抽象类3.练习:租车系统4.接口简介5.接口的特性6.接口的...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 ...

    java教程.rar

    Useabs.java 抽象类的创建 第6章 示例描述:介绍Java的继承与多态。 Useext.java 简单的关于继承的例子 Fruit.java 基于重写的例子 第7章 示例描述:介绍并演示了类的高级使用。 Example.java final...

    java基础案例与开发详解案例源码全

    19.2 Java网络类和接口497 19.3 InetAddress类498 19.4 URL和URLConnection类499 19.5 Scoket套接字505 19.6 Datagram套接字509 19.7 综合示例512 19.8 本章习题520 第20章 20.1 网络版五子棋522 20.1.1 需求描述522...

    Java语言基础-面向对象

    Java语言基础-面向对象 Java语言是面向对象的编程语言 对象 对象:是构成系统的最基本的单位 属性:描述对象的静态特征(成员变量) ...[修饰符]可以是:[public公共类][abstract抽象类 | final最终类]默认为friend

Global site tag (gtag.js) - Google Analytics