【转】java关键字final ,抽象类、接口介绍
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 ,抽象类、接口介绍相关推荐
- Java关键字final、static、this、super使用总结
一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...
- 转!Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非 ...
- [Java] 关键字final、static使用总结
一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...
- Java关键字final使用详解
2019独角兽企业重金招聘Python工程师标准>>> http://docs.oracle.com/javase/tutorial/java/IandI/final.html Wr ...
- Java关键字final、static
一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...
- 【Java编程】Java关键字final使用详解
根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变 ...
- 【java】java 关键字: final详解
1.概述 转载:java 关键字: final详解
- Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列
Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...
- 面向对象(final/抽象类/接口/内部类)
>final 关键字 1.final修饰类,这个类不能被被继承; 2.final修饰变量,这个变量的值不能发生改变,就是常量; 注意: final修饰的变量,必须要初始化赋值,否则报错; 赋值的 ...
- java基础-类-抽象类-接口(自学笔记)
一.类 class 定义:具有相同属性(特性)和方法(行为)的一类事物 的抽象的总称 例如:人类,动物,车,屌丝类.是一种类别,世界上所有的事物都可以分类,在计算机中java都能进行对应和体现 类的三 ...
最新文章
- stp协议c语言,STP(生成树协议)
- 阿里云ECS——Linux连接错误[Read from socket failed: Connection reset by peer]解决方案
- python venv windows7_安装 Python、pip 和 venv
- mysql中局部变量说法正确的是_mysql全局变量和局部变量
- (转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
- pytorch torch.nn.Module
- 基于summernote的富文本编辑器,粘贴时去除word、html格式
- java time 赋予时间_java.time.OffsetTime
- AttributeError: 'NoneType' object has no attribute 'split' 报错处理
- Linux的目录ls命令
- ArcGIS Engine开发前基础知识(3)
- 理想的低通滤波器、巴特沃斯滤波器、高斯滤波器
- 计算机专业毕业设计的进度记录,毕业设计周次进度计划及实际进展情况表.doc...
- gis怎么提取水系_利用ArcGIS水文分析工具提取河网
- python谁的教程好贴吧_python深挖65万人的明星贴吧,探究上万个帖子的秘密
- 库卡机器人坐标手势_库卡机器人为何要几种坐标系?
- 属性动画cancel
- python处理视频图像_图像/视频处理选项
- 魅族 -- 禁止D及以下级别LOG的输出
- 如何使用STM32指南者LCD显示图片
热门文章
- Java设计模式の适配器模式
- C# string 特殊的引用类型
- 编写有效用例_阅读笔记03
- 项目开发经常使用PHP功能
- eclips断点调试
- 对话周鸿祎:从程序员创业谈起
- rnqoj-28-合唱队形-最长上升子序列
- java 实现poi方式读取word文件内容
- Bzoj1070 [SCOI2007]修车
- 为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?...