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学习-前台开发-JavaScript、Dom和jQuery
JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...
- JS 如何获取radio或者checkbox选中后的值
废话不多说,直接上代码: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- Leetcode 671.二叉树中第二小的节点
二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的一个二叉树 ...
- SQL 基础笔记(一)
本笔记整理自<SQL 基础教程>.<MySQL 必知必会>和网上资料.个人笔记不保证正确. 一.基础 SQL,即结构化查询语言,是为访问与操作关系数据库中的数据而设计的语言. ...
- linux备忘录-档案与文件系统的压缩与打包
知识点 文件扩展名与压缩解压缩工具 .Z -> compress程序压缩的档案 .gz -> gzip程序压缩的档案 .bz2 -> bzip2程序压缩的档案 .tar -> ...
- cmd中神奇的命令 prompt $g
万万没想到还可以这么玩 将java文件编译为class以后可以这样直接运行 java A<1.txt 就相当于把1.txt中的内容以模拟输入的方式输入到java中 java A>1.txt ...
- Learn the shell
learn the shell what is the shell? when we speak of the command line,we are really to the shell.Actu ...
- PHP实现图片上传并压缩
本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下 使用到三个文件 connect.php:连接数据库 test_upload.php:执行SQL语句 upload_im ...
- RabbitMQ磁盘警报
RabbitMQ磁盘警报 当可用磁盘空间低于配置的限制(默认为50MB)时,将触发警报,所有生产者将被阻止.目标是避免填满整个磁盘,这将导致节点上的所有写操作失败,并可能导致RabbitMQ终止.为了 ...