1. abstract抽象

什么是abstract,中文为抽象,从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象。看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表达出来,要理解抽象的东西,就必需从内心感受它们。

什么是抽象类

抽象类的定义和使用格式

abstract class 类名{
类体
}
class 类名 extends 抽象类 {
//实现全部抽象方法
}

抽象类,用abstract修饰的类为抽象类,一个类如果它的所有子类都重写了这个方法,那么给它添加抽象的声明,那么这个类就为抽象类。

那么这个抽象方法的类就为抽象类,具有抽象方法的类为抽象类,但抽象类不一定具有抽象方法,抽象类中可以有构造方法,不能创建对象。

抽象类中如果有抽象方法,那么子类继承这个抽象类之后,就必须要重写抽象类中的 所有抽象方法。

一个类用abstract进行修饰为抽象类,那么这个抽象类不能在用final来修饰了,抽象类是类对象的抽象集合,抽象类使用abstract关键字修饰,abstract不能与final并列修饰同一个类。

对于抽象方法,不能在用staticfinalprivate来修饰

在抽象类中具体抽象的是属性和行为,在抽象类中,含有抽象方法的类为抽象类,一定是抽象类,但抽象类中不一定含有抽象方法。

案例:

//抽象类:作为抽象方法是可以重载的
public abstract class Person {
public abstract void run();
} //子类继承抽象类
public class Studentone extends Person{
@Override
public void run(){
System.out.println("人会跑");
}
} //测试
public class Test {
public static void main(String[] args){
Person person = new Student();
person.run();
}
} //结果
人会跑

2. 接口

什么是接口(interface)

接口中的方法都是抽象方法public权限,全是抽象函数,不能生成对象

interface Student{
public void read();
public void write();
} class ChineseStudent implements Student{
//复写
public void read(){
System.out.println("read");
}
public void write(){
System.out.println("write");
}
} class Test{
public static void main(String args[]){
ChineseStudent chinesestudent = new ChineseStudent();
Student student = chinesestudent; student.read();
student.write();
}
}

接口的定义和使用格式

interface 接口名 {
[public] [static] [final] 变量;
[public] [abstract] 方法;
}
class 类名 implement 接口列表 {
//实现所有接口中声明的方法
}

什么是接口呢?这个类中所有的方法都是抽象方法。

接口不同抽象,没有构造方法,接口不是一个类。

接口中也不能创建对象,抽象方法也不能。

JDK1.8以前,interface来定义接口,通过implements关键字让接口和类产生关系,类实现接口,要重写接口中的所有抽象方法。

Java中只有单继承,多实现,一个类可以继承一个父类,但一个类可以实现多个接口。

实现接口用implements关键字,
一个接口可以实现多个接口,
一个接口可以继承多个接口
interface Student{
public void read();
public void write();
} interface Teacher{
public void teach();
public void test();
} class Person implements Student,Teacher{
public void read(){
System.out.println("read"):
}
public void write(){
System.out.println("write");
}
public void teach(){
System.out.println("teach"):
}
public void test(){
System.out.println("test"):
}
}
// 测试
class Test{
public static void main(String args[]){
Person person = new Person(); Student student = person;
student.read();
student.write(); Teacher teacher = person;
teacher.teach();
teacher.close();
}
}

接口解决了多继承的问题,将多继承的这种机制在java中通过接口实现了,接口与接口之间是继承的关系。

interface A{
void showa();
}
interface B{
void showb();
}
class C implements A,B{
public void showa(){};
public void showb(){};
}

接口中的属性默认是使用public static final修饰的

interface A {
void add();
}
class B implements A {
// 接口中的方法默认是使用public修饰
void add(){}
}

实现多接口,存在方法名一致时,会导致方法重写的时候产生歧义。

抽象类和接口比

  • 抽象类是对类抽象,而接口是对行为的抽象。
  • 抽象类为继承关系,接口为实现类与接口之间的契约关系。
  • 抽象类为单继承,接口为多“继承”。子类只能继承一个抽象类,但可实现多个接口。

代码

//抽象类
abstract class Person {
abstract void run();
abstract void jump();
} //接口
interface School{
void go();
} //实现
class Student extends Person implements School{
void run();
void jump();
void go();
}

抽象类中成员变量默认为friendly,函数修饰符public,protected,default

接口属性为静态public static final成员函数为public

3. 内部类

内部类的分类:

  • 静态内部类
  • 局部内部类
  • 成员内部类
  • 匿名内部类
// 外部类
class Demo{
private int num = 3;
// 定义内部类
class Int{
void show(){
System.out.println("num="+num);
}
} void method(){
Int int = new Int();
int.show();
}
} class Inner{
public static void main(Stirng[] args){
Demo demo = new Demo();
demo.method();
}
}

内部类有 非静态,静态,匿名类

语法:

new 外部类().new 内部类()

成员内部类:

在成员变量的位置上定义的类为成员内部类。

如果要使用成员内部类就要使用外部类.内部类来访问。

静态内部类:

在成员位置上用static修饰的内部类为静态内部类。

静态内部类只能访问外部类的静态成员和本内部类的成员;且不能访问外部类的非静态成员

匿名内部类:(对应类的子类或者对应接口的实现类)

是一种特殊的局部内部类。

访问外部类中的内部类,非静态

Outer.Inner int = new Outer().new Innter();

对静态内部类中的非静态成员

Outer.Inner int = new Outer().new Innter();

static声明的内部类,则内部类变成外部类,用static声明的内部类不能访问非static的外部类属性,外部类的属性要用static才能访问。

内部类可以使用外部类所有的方法和变量,就算被私有化也一样可以,如:

class Outer{
private int x;
// 创建内部类的实例
Inner inner = new Inner();
public void do(){
// 调用内部类的方法
inner.go();
}
// 内部类
class Inner{
void go(){
x = 30;
}
}
}

4. 包

java中提供了不同的类和接口存放在不同的包中。

常见的包

java.applet
java.awt
java.net
java.util
java.lang
java.awt GUI
java.io 数据传输
java.math 数学运算
java.nio 高并发
java.net 网络编程
java.text 格式化
java.sql 和数据库交互

包的格式:

package 包名[.子包名[…]];

引入java

import  包层次结构的类名;

垃圾分代回收机制

垃圾分代回收机制针对堆内存,所有内存由Java自动分配到回收,垃圾收集器。

结语

  • 下面我将继续对JavaAndroid中的其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

Java面试集合(六)的更多相关文章

  1. Java面试集合(七)

    前言: Java面试集合(六) 的回顾,对于final可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final来修饰方法,方法不可重载,继承,重写,final用来修饰类,该类不能被继 ...

  2. Java面试集合(三)

    前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...

  3. Java面试集合(三)-30道面试题

    前言 大家好,我是 Vic,今天给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类?答:可以含有多个类,但只有一个是public类,public类的类名与文件 ...

  4. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  5. Java面试集合(一)

    前言 大家好,给大家带来Java面试集合(一)的概述,希望你们喜欢 一 1.Java按应用范围可划分几个版本? 答:Java按应用范围有三个版本,分别是JavaSE,JavaEE,JavaME. 2. ...

  6. java面试 (六)

    1 String.split(String regex), 传入的参数是正则表达式,有一些特殊字符(比如.[]()\| 等)需要转义. 2  关于枚举类型,一般用作常量,理想情况下,枚举中的属性字段是 ...

  7. Java面试集合(五)

    1. 继承 在Java中的三大特性中存在一种为继承,继承究竟是用来解决什么问题的呢?在我们写代码的时候,我们会在一些类中使用相同的属性和方法,如两个不同的人(类),共同都有年龄,身高,体重等. 那么我 ...

  8. Java面试集合(四)

    1. jdk,jre,jvm之间的关系 JVM是Java虚拟机,是Java跨平台的重要保障,JVM实现Java跨平台的前提,可以针对不同的操作系统,有不同的JVM. 可以说Java语言是跨平台的,但J ...

  9. Java之集合(六)PriorityQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7299233.html 1.前言 本章介绍队列中的PriorityQueue--优先队列,顾名思义,这是一个可以指 ...

随机推荐

  1. yii2.0 邮件发送如何配置

    邮件发送配置: 打开配置文件将下面代码添加到 components => [...]中(例:高级版默认配置在/common/config/main-local.php)         'mai ...

  2. 第二阶段第九次spring会议

    今天我将对软件进行宠物信息的添加. 清屏功能 private void button5_Click(object sender, EventArgs e) { textBox2.Text = &quo ...

  3. 导入别人的项目eclipse 出现乱码 该如何处理

  4. cookie存储

    cookie就是用来存储数据的 cookie先分装函数 这是用来存数据的函数 function setCookie(name,value,iDay){ if(iDay){ var oDate = ne ...

  5. django中views中方法的request参数

    知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...

  6. hprose for php

    1.客户端和服务器简单DEMO 通过工厂方法 create 创建客户端 $client = \Hprose\Client::create($uriList = null[, $async = true ...

  7. Codeforces Round #532 (Div. 2) F 线性基(新坑) + 贪心 + 离线处理

    https://codeforces.com/contest/1100/problem/F 题意 一个有n个数组c[],q次询问,每次询问一个区间的子集最大异或和 题解 单问区间子集最大异或和,线性基 ...

  8. 【慕课网实战】五、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    提交Spark Application到环境中运行spark-submit \--name SQLContextApp \--class com.imooc.spark.SQLContextApp \ ...

  9. redis_简单动态字符串

    在redis中,C字符串(以'\0'结尾的字符数组)只用在一些无需对字符串值进行修改的地方,比如打印日志.其他情况,redis使用SDS - SimpleDynamicString 简单动态字符串,来 ...

  10. 算法学习笔记:knn理论介绍

    阅读对象:了解指示函数,了解训练集.测试集的概念. 1.简介 knn算法是监督学习中分类方法的一种.所谓监督学习与非监督学习,是指训练数据是否有标注类别,若有则为监督学习,若否则为非监督学习.所谓K近 ...