1.final 关键字

final关键字可以用来修饰类,方法,成员变量

(1)final标记的类不能被继承;

(2)final标记的方法不能被子类复写;

(3)final标记的变量即成为常量,只能被赋值一次.

final标记的变量名的所有单词必须大写

2.抽象类

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

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

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

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();

}

}

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();

}

}

2.2抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象. 如果在抽象类中存在有参构造方法,则必须在子类中明确的使用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()) ;

}

}

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.接口:

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

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

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

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 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();

}

}

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

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.2如果一个子类既要继承一个抽象类,又要实现一个接口,该怎么写呢?

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

转载于:https://www.cnblogs.com/sunson/archive/2012/04/14/2446869.html

【转】java关键字final ,抽象类、接口介绍相关推荐

  1. Java关键字final、static、this、super使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  2. 转!Java关键字final、static使用总结

    Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非 ...

  3. [Java] 关键字final、static使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  4. Java关键字final使用详解

    2019独角兽企业重金招聘Python工程师标准>>> http://docs.oracle.com/javase/tutorial/java/IandI/final.html Wr ...

  5. Java关键字final、static

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  6. 【Java编程】Java关键字final使用详解

    根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变 ...

  7. 【java】java 关键字: final详解

    1.概述 转载:java 关键字: final详解

  8. Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列

    Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...

  9. 面向对象(final/抽象类/接口/内部类)

    >final 关键字 1.final修饰类,这个类不能被被继承; 2.final修饰变量,这个变量的值不能发生改变,就是常量; 注意: final修饰的变量,必须要初始化赋值,否则报错; 赋值的 ...

  10. java基础-类-抽象类-接口(自学笔记)

    一.类 class 定义:具有相同属性(特性)和方法(行为)的一类事物 的抽象的总称 例如:人类,动物,车,屌丝类.是一种类别,世界上所有的事物都可以分类,在计算机中java都能进行对应和体现 类的三 ...

最新文章

  1. stp协议c语言,STP(生成树协议)
  2. 阿里云ECS——Linux连接错误[Read from socket failed: Connection reset by peer]解决方案
  3. python venv windows7_安装 Python、pip 和 venv
  4. mysql中局部变量说法正确的是_mysql全局变量和局部变量
  5. (转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
  6. pytorch torch.nn.Module
  7. 基于summernote的富文本编辑器,粘贴时去除word、html格式
  8. java time 赋予时间_java.time.OffsetTime
  9. AttributeError: 'NoneType' object has no attribute 'split' 报错处理
  10. Linux的目录ls命令
  11. ArcGIS Engine开发前基础知识(3)
  12. 理想的低通滤波器、巴特沃斯滤波器、高斯滤波器
  13. 计算机专业毕业设计的进度记录,毕业设计周次进度计划及实际进展情况表.doc...
  14. gis怎么提取水系_利用ArcGIS水文分析工具提取河网
  15. python谁的教程好贴吧_python深挖65万人的明星贴吧,探究上万个帖子的秘密
  16. 库卡机器人坐标手势_库卡机器人为何要几种坐标系?
  17. 属性动画cancel
  18. python处理视频图像_图像/视频处理选项
  19. 魅族 -- 禁止D及以下级别LOG的输出
  20. 如何使用STM32指南者LCD显示图片

热门文章

  1. Java设计模式の适配器模式
  2. C# string 特殊的引用类型
  3. 编写有效用例_阅读笔记03
  4. 项目开发经常使用PHP功能
  5. eclips断点调试
  6. 对话周鸿祎:从程序员创业谈起
  7. rnqoj-28-合唱队形-最长上升子序列
  8. java 实现poi方式读取word文件内容
  9. Bzoj1070 [SCOI2007]修车
  10. 为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?...