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)面试相关: ...
随机推荐
- Python 基础学习篇
注:技术尚浅,时间匆忙,如有错误或者不当之处值得商榷的,请留言,吾必思而改之. 第一篇 :Python基础- 安装/变量/输入/及循环语句使用 第二篇: Python基础- 常用数据类型 第三篇: ...
- ironic的自动化脚本
# -*- coding:utf-8 -*- import json import subprocess import os import time import random trunk_start ...
- docker搭建jira-7.11.1 + 破解
几行命令教你搭建一个jira最新版.所有步骤必不可少.破解补丁需要的请在下面留言. pull docker 镜像: jira:7.11.1(目前的最新版本) mysql:5.7 docker ...
- (总结)Linux下查看Nginx Apache MySQL的并发连接数和连接状态
1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a ...
- Nginx出现500错误解决办法
查看错误日志D:\nginx\logs\error.log 得知:Nginx配置文件中会将路径中的 \t 默认转义成 空格 改为双斜杠就可以了
- finally代码块不被执行的情况总结
以前跟别人讨论finally关键字,我总是简单的说:“fianly代码块中的代码一定会执行,一般用来清除IO资源等非内存资源(内存资源由GC机制回收)”. 今天翻书发现了几种不会执行的情况,现在总结下 ...
- P4712 「生物」能量流动
由于题面$markdown$格式,博主太懒不想一个一个改,所以题面见此:戳 Solution: 本题的贪心思路比较有意思,完全考读题... 首先,因为总的能量来源是$a[0]$,所以可以理解为总能量守 ...
- 深入解析VueJs中的V-bind指令
v-bind 主要用于属性绑定,比方你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定.这次主要介绍了VueJs中的V-bind指令,需 ...
- NOI退役啦
没进前一百 签的上交一本 高三加油喽
- 2.1 Python3.5安装以及爬虫需要的环境配置
之所以选用Python,是因为对于网络爬虫来说,Python是最好上手的一种语言.本文讲述的安装配置都是基于Windows的环境. 另外我想说的是,文中用到的下载链接尽量官方网站上的下载链接,这是我比 ...