面向对象(final/抽象类/接口/内部类)
>final 关键字
1.final修饰类,这个类不能被被继承;
2.final修饰变量,这个变量的值不能发生改变,就是常量;
注意:
final修饰的变量,必须要初始化赋值,否则报错;
- 赋值的方式有三种:直接在变量后面 = 赋值;
- 在构造函数中赋值;
- 在代码块(在构造之前运行)中赋值;
对于抽象数据类型,final修饰时,不能改的是引用,而引用中的堆内存中的对象的属性可以随意改;
3.final修饰方法,这个方法不能被重写,覆盖;
>抽象类和接口:
抽象类和接口都是类,都不能有自己的实例对象(不能new);
抽象类:
功能:能够定义抽象方法
抽象类体现了模板策略:将绝大多数功能放到抽象类中完成。
抽象类中不能完成的细节方法,交给子类完成(子类覆盖/重写父类规定好的抽象方法);
public abstract class T
可以有方法的声明;
也可以有方法(非abstract修饰的方法)的实现{代码体;};
public abstract class Father {public void f1() {//f1方法必须要通过子类对象调用,子类对象又必须实现s1,可以调用;s1();System.out.println("普通方法可以有方法体");}// 抽象方法不能有方法体,且子类继承,必须实现所有的抽象方法;public abstract void s1();
}
接口
(一个更纯粹的抽象类,用来定义规范,只定义做什么,不关心怎么做;比如说Java的jdbc编程,Java定义了一些接口,各个数据库的厂商去提供实现类(数据库驱动),Java程序员调用这些接口就可以了):
public interface T
只能有方法的声明;
不能又任何方法的实现;
注意:
- Java中可以多实现
- 一个接口可以继承另外一个接口(也继承了父接口的方法声明),类和接口不能继承,只能实现;
- 一个类实现一个接口,要实现其中所有的方法;
- 在接口中定义好一个变量的时候,这个变量static类型的常量;因为jvm会自动添加static final 关键字;
- 向上造型,向下转型,一样适用;
>内部类
在定义类的时候,我们一般把类定义成一个独立的程序单元。但是在某些情况下,我们会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,也可以称为嵌套类。包含内部类的类也被称为外部类,也可以称为宿主类。
>非静态内部类
- 内部类不能跟自己的外部类重名,可以跟外部类平级的类重名。
- 内部类可以无条件拿到外部类的成员变量,因为内部类被当成外部类的成员,同一个类成员之间可以相互访问。
- 外部类不能拿到内部类的成员变量,外部类想要想要拿到内外部类成员,必须创建内部类对象。
- 非静态内部类不能有static方法。
- 内部类在其他类中实例化的方法: new 外部类().内部类();(实际内部类一般不让访问)
- 内部类可以被其他类继承,继承它的类要写一个构造方法,并手工调用 外部类.super();
public class InnerTest {private int i = 1;public static void main(String[] args) {new InnerTest().fo();}public void fo() {inner i = new inner();i.fi();System.out.println(i.s);}class inner {public String s = "内部类字符串变量";// 非静态内部类,不能有静态方法public void fi() {System.out.println("内部类的fi方法");}}
}
public class Go {//其他类调用内部类public static void main(String[] args) {new InnerTest().new inner().fi();}
}
public class SubInner extends InnerTest.inner {// 继承一个内部类public SubInner(InnerTest out) {out.super();}
}
>静态内部类
- 静态内部类能调用外部类静态成员,不能调用非static成员;
- 外部类不能调用内部类成员,但可以使用静态内部类的类名作为调用者来访问;
>局部内部类(类放到方法里,了解)
>匿名内部类(方便我们去继承一个抽象类和实现一个接口)
A a=new A(){ };
- 这里的大括号,就是一个类;
- 这个类没有名字,可以使用a来操作这个匿名内部类;
- 这个匿名内部类,继承了A;
注意:内部类想要用外部类的变量,这个变量必须要声明为final类型;
>垃圾回收(暂时了解)
GC-垃圾回收机制:Java不用关心内存分配和内存回收;
垃圾回收器,在回收对象时,先调用对象的finalize()方法;这是Object类的一个方法,如果对象成功救活,则不回收,否则回收;
jvm分代;根搜索算法;
面向对象(final/抽象类/接口/内部类)相关推荐
- 抽象类+接口+内部类作业题及答案
抽象类+接口+内部类作业题 一.选择题 Person类和Test类的代码如下所示,则代码中的错误语句是( ).(选择一项) public class Person { public String na ...
- 抽象类+接口+内部类作业题
抽象类+接口+内部类作业题 一. 选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是( c ).(选择一项) public class Person { public ...
- Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
文章目录 Eclipse工具中java项目的工程结构 静态代码块的书写格式 静态代码块,构造代码块,构造方法的优先级 static关键字的特点 封装的概念 private关键字的特点 面向对象思想特点 ...
- javaSE各阶段练习题--面向对象-多态-抽象类-接口
1 (多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果.如果传入的是Apple 输出 "流出苹果汁"传入的是Orange 输出 "流 ...
- 抽象类+接口+内部类(有点晕 写的自己都感觉不太对)
1. 编写程序描述兔子和青蛙 需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙. 实现思路及关键代码 1) 分析兔子和青蛙的共性 2) 根据共性,定义抽象的动物类 属性:名字.颜色.类别(哺乳 ...
- Java自学笔记——Java面向对象——04.抽象类、接口、内部类
Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...
- Java中接口、抽象类与内部类学习
2019独角兽企业重金招聘Python工程师标准>>> Java中接口.抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 抽象方 ...
- 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)
JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...
- Java面向对象编程——抽象类和接口
Java面向对象编程--抽象类和接口 定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征. 抽象类: 如果一个类没有足够的信息去描述一个具体的对象,那 ...
最新文章
- “神经网络”的逆袭:80年AI斗争史
- as本地仓库更改_Android Studio 之 Gradle与Project Structure详解
- BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)
- linux ipmitool检测内存,一种基于ipmitool工具循环侦测内存的方法与流程
- linux文件系统体系结构 和 虚拟文件系统(VFS)
- python os.walk
- 关于VISIO工具栏、菜单栏消失的解决办法
- Linux 下使用Postgre中的命令,要使用postgres这个用户
- Spring知识点简介
- Linux 内核--任务0的运行(切换到用户模式)move_to_user_mode
- jsch mysql_java Jsch实现跳板机操作远程数据库
- 移动互联网赌博的大礼包触发
- 微信小程序轮子 - 外卖点餐左右联动界面完整源码(类似美团饿了么点餐界面)
- CV LRO mission (LROC introduction)
- 潘丽云:魏尔斯特拉斯的复变函数思想分析(2009)(2011-01-14 22:34:30)
- StudentManagerSystem(学生管理系统)(利用Result类,各种工具类)
- 二叉树前序后序中序互推总结
- 全球数字高程模型(数据)
- 空间相机的像质评价体系
- java高级之JDBC的基本操作知识