1.13抽象类及接口(附简述final关键字)
一、final
final的中文意思就是不可更改的,最终的。
1.final修饰变量,那么该变量无法更改。一旦该变量赋了初值,就不能重新赋值。
final MAX = 1100;
//final修饰后MAX就无法重新赋值。
2.final修饰方法
final修饰方法,那么该方法不能被子类重写,但可以重载。
class Person{
final void getName(){.....}
}
//getName()方法,无法被子类重写。
3.final修饰类
final修饰类,该类无法被继承。
二、抽象类
首先什么是抽象类,简而言之就是包含了抽象方法的类。
那什么又是抽象方法了,就是只有声明部分,但没有方法体。
完整的方法应该是
void getName() //方法声明
{ //方法体
System.out.println("i am hcf");
}
而抽象方法是没有方法体的,abstract void getName();
抽象方法前面必须加abstra修饰,拥有抽象方法的类称为抽象类,那么抽象类前面要加上abstract修饰。
abstract class Person{
abstract void getName();
}
下面简述抽象类的几个要点:
1.有抽象方法的类只能定义为抽象类,不然会出现错误。
abstract class Person{ //定义为抽象类,那么必须包含抽象方法。
abstract void getName(); //有抽象方法,必定为抽象类
}
2.抽象类不能用new创建对象,即使你在抽象类里面添加构造方法也不行。
public class TestAbstract {
public static void main(String[] args) {
/* Person stu = new Person(); */ //Person是抽象类,无法实例化
}
}
abstract class Person{
abstract void getName();
public void Person(){ //即使添加了构造方法也无法实例化。
} //只要是抽象类,就无法实例化。
}
3.抽象类中可以包含一般的方法或属性,但只能被子类调用。
public class TestAbstract {
public static void main(String[] args) {
Student stu = new Student();
stu.getName();
stu.out(); //抽象类中的其他方法可以通过子类来调用
}
}
abstract class Person{
abstract void getName();
void out(){ //抽象类中包含的其他方法
System.out.println("1132");
}
}
class Student extends Person{
public void getName(){
System.out.println("i am hcf");
}
}
运行结果:
i am hcf
1123
4.抽象类只能被继承。
5.子类必须实现抽象类中的抽象方法。
abstract class Person{
abstract void getName();
void out(){
System.out.println("1132");
}
}
class Student extends Person{
public void getName(){ //子类必须实现抽象方法,否则会报错。
System.out.println("i am hcf");
}
}
到这里大家可能会问,这抽象类有什么好处,为什么要用它?
抽象类就相当于模板,子类必须遵守这个模板。
因为子类必须实现抽象类中的方法,这样可以做到设计和实现分离。
设计人员只需要定义好方法,返回值等,开发人员实现这些方法即可。
三、接口
接口比抽象类还要抽象,接口只能包含方法声明和常量。
接口说明:
1.接口只能用public 或default修饰,public修饰的接口名称必须和文件名相同(这点和public类相似)。
public interface Fly{
void flyStyle();
}
interface attack{
int attackRange(String arms);
}
2.一个文件中只能有一个被public修饰的接口。
3.接口可以多继承
public interface Fly{
void flyStyle();
}
interface Attack{
int attackRange(String arms);
}
interface FlyArms extends Fly, Attack{ //飞行武器(FiyArams)就继承了Fly(飞行)接口和attack(攻击)接口
}
4.接口中常量默加上public static final,写于不写都一样。
interface Fly{
int MIN_HIGHT = 1; //相当于public static final int MIN_HIGHT = 1;
void flyStyle(); //相当于public abstract void flyStyle();
}
5.接口中的方法默认加上public abstract,写于不写都一样。
接口要点:
1.接口不可被类继承,只能被类实现(implements)。
2.接口中的方法必须实现,且方法必为public。
public interface Fly{
void flyStyle();
}
interface Attack{
int attackRange(String arms);
}
class implements Fly{ //接口只能被实现(implements)
public void flyStyle(){ //类实现接口必须实现接口中定义好的方法。
System.out.println("飞飞飞!");
}
}
3.接口不能创建实例,但可以声明引用变量类型。
public class FramPaint {
public static void drawFram(MyPaint p){ //(Mypaint p) 接口声明引用变量类型
System.out.println("启动线程"); //有点像之前的多态父类声明引用子类对象。
System.out.println("增加循环"); //这个还涉及到后面的回调函数,其实就是多态。
System.out.println("查看消息");
p.paint();
System.out.println("启动缓存");
}
public static void main(String[] args) {
FramPaint.drawFram(new GameFarm()); //调用静态方法可以直接类名加方法调用,
} //静态方法中只能调用静态方法。
}
interface MyPaint {
void paint();
}
class GameFarm implements MyPaint{
@Override
public void paint() {
System.out.println("GameFarm");
}
}
下面还有一个小例子,用于理解
public class Test {
public static void main(String[] args){
FireArms fa = new FireArms();
fa.flyStyle();
System.out.println("攻击距离:"+fa.attackRange(fa.name));
}
}
interface Fly{
void flyStyle();
}
interface Attack{
int attackRange(String arms);
}
interface FlyArms extends Fly, Attack{}
class FireArms implements FlyArms{
String name = "FireArms";
public void flyStyle(){
System.out.println("扣动扳机飞行");
}
public int attackRange(String arms){
int range = 0;
switch(arms){
case "FireArms": range = 800;
break;
default:System.out.println("未知");
break;
}
return range;
}
}
1.13抽象类及接口(附简述final关键字)的更多相关文章
- Java程序设计8——抽象类、接口与内部类
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...
- LY.JAVA面向对象编程.final、多态、抽象类、接口
2018-07-08 13:47:26 final关键字 多态 从右向前念 多态的成员访问特点及转型的理解 多态的问题理解: class 孔子爹 { public int age = 40; p ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
- 抽象类和接口 static final finalize
抽象类 任何含有一个或多个抽象方法的类都必须声明成抽象类,用关键字abstract. 抽象类没有对象,即一个抽象类不能用new来直接实例化. 不能定义抽象构造方法或抽象静态方法.(但是可以创建父类引用 ...
- JAVA:类的三大特征,抽象类,接口,final关键字<3>
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
- final、抽象类、接口、多态、
final———最终.作为一个修饰符 可以修饰类. 函数. 变量: 被final修饰的类不可以被继承: 被final修饰的方法不可以被重写: 被final修饰的变量只能够被赋值一次,既可以修饰成 ...
- final修饰符,多态,抽象类,接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. ...
- java详解final、多态、抽象类、接口原理
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...
随机推荐
- C#共享内存
百度:C#共享内存. 文章:C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 资料:UnmanagedMemoryAccessor 资料:MemoryMappe ...
- ubuntu16.04 使用问题笔记
1.问题: 下列软件包有未满足的依赖关系: vim : 依赖: vim-common (= 2:7.4.826-1ubuntu1) 但是 2:7.4.1689-3ubuntu1 正要被安装 E: 无法 ...
- Java操作 Redis 集群
// 连接redis集群 @Test public void testJedisCluster() { JedisPoolConfig config = new JedisPoolConfig(); ...
- 【BZOJ 5000 OI树】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 107 Solved: 64[Submit][Status][Discuss] Description ...
- linux中sed工具的使用
sed 本身也是一个管线命令,而且 sed 还可以将数据进行取代.删除.新增.撷取特定行等等的功能. $ sed [-nefr] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 ...
- What is a Microsoft Failover Cluster Virtual Adapter
What is a Microsoft Failover Cluster Virtual Adapter anyway? A question often asked is, "What i ...
- HDU1556---树状数组 | 线段树 |*
输入n,紧接n行,每行a,b n个气球,a,b表示从第a到第b个气球涂一次色,输出每个球最终的涂几次色 暴力超时,优化数据结构 1.树状数组 #include<iostream> #inc ...
- Data_Structure01-绪论作业!
一.作业题目 仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数基本运算: 构造有理数T,元素e1,e2分别被赋以分子.分母值 销 ...
- IaaS, PaaS和SaaS
原文链接:http://www.leiphone.com/news/201406/iaas-paas-and-saas.html 云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, Ia ...
- 杭电oj2072
因为一直不能ac先发这里,希望有看到的大佬能指点一二. 先讲一下我的基本思路,首先将一整行数据保存在数组中,接着遍历数组,根据空格将每个单词存入二维数组中,最后遍历二维数组,找出其中不同的单词并计数. ...