接口

接口定义

java中的接口也是单独使用一个文件定义,接口的定义相当简单,权限固定为public,变量只能定义为常量,方法只能抽象

接口成员只能是如下几种情况
public interface MyInterface {
public abstract void fn(); // 只能使用public修饰符
abstract void fn1(); // 效果和上面写法一致
public static final int a = 1; // 表示静态常量
String b = "bb"; // 效果和上面写法一致
}

默认方法

interface MyInterface {
default void fn() {
System.out.println( "default implementation" );
}
}
public class Test implements MyInterface { @Override
public void fn() {
System.out.println( "overridden implementation" );
} public static void main(String[] args) throws Exception{
MyInterface.super.fn();
fn();
}
}

函数式接口

@FunctionalInterface
public interface MyInterface<T> {
T test(T t);
} MyInterface<String> test = (t) -> t;
test.test("啦啦啦");

泛型

泛型类

class Test<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
Test<Integer> test = new Test<Integer>();

泛型类继承

第一种

class Inheritor extends Test<String> {
} Inheritor inherit = new Inheritor();
inherit.setValue("只能是字符串"); 第二种 class Inheritor<T> extends Test<T> {
} Inheritor<Integer> inherit = new Inheritor<>();
inherit.setValue(1); 第三种 class Inheritor extends Test {
} Inheritor inherit = new Inheritor();
inherit.setValue("这里可以传递任何类型的值"); 第四种 class Inheritor<T, E> extends Test<E> {
} Inheritor<String, Integer> inherit = new Inheritor<>();
inherit.setValue(1); 第五种 抽象类
abstract class Test<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
} Test<String> test = new Test<String>(){};
test.setValue("字符串");

类型限定

? extends T         表示?必须继承自T
? super T 表示?必须是T的父级 class Test<T extends Object>{}
class Test<T extends Object & Iterable<T>>{}

泛型方法

public <T> List<T> Fn(T t1, T t2) {
List<T> result = new ArrayList<T>();
result.add(t1);
result.add(t2);
return result;
} List<String> list = Fn("a", "b"); // 无需手动指定泛型类型,程序会自动推断类型 如果需要你可以强制指定自己需要的类型
List<Object> list = this.<Object>Fn(1, "a");

泛型接口

interface MyInterface<T> {
public void Fn(T t);
}

构造函数

单个构造函数
public class demo2 {
public int a;
public demo2 (int i) {
this.a = i;
}
} 多个构造函数
public class demo2 {
public int a;
public demo2() {
this(111); // 只能写在第一行
}
public demo2 (int i) {
this.a = i;
}
}

类的继承

    public class Test2 {
public String str = "aaa";
} public class Test1 extends Test2 {
public void fn() {
System.out.println(str);
}
} java中子类重写父类的方法,直接写方法就可以了,
子类中的重写的方法的权限必须大于或者等于父类方法的权限 子类继承父类,需要父类有无参数的构造函数 默认情况下,类不写构造函数会自动编译一个无参数构造函数,除非人为指定构造函数,如下 public class demo2 {
public demo2(int i) {
}
} public class demo1 extends demo2 {
public int a;
public demo1() {
// super(); 默认情况下不写super,系统会自动编译成 super(),所以父类不包含无参数构造函数就会报错
super(111); // super只能写在第一行
}
}

抽象类

    抽象类,就是一个风马牛不相及的东西的共性提取,不能实例化
abstract public class Test3 {
public String str = "aaa";
public abstract void fn(); // 抽象方法只能定义,具体实现必须在子类中完成
}
抽象方法不能和 private,final,static 一起使用

instanceof运算符

    用来判断一个对象是否是一个类的实例
demo2 test = new demo2();
boolean b = test instanceof demo2;

内部类

    public class demo {
int i = 1;
public class demo1 {
int i = 2;
public void fn() {
int i = 3;
System.out.println(i); // 3
System.out.println(this.i); // 2
System.out.println(demo.this.i); // 1
}
}
}
使用此内部类
demo.demo1 test1 = new demo().new demo1();
test1.fn();

equals

    引用类型比较的地址是否相同,值类型比较值是否相同
demo test1 = new demo();
demo test2 = new demo();
boolean b = test1.equals(test2);
可以重写equals方法,实现自定义比较
public boolean equals (Object obj) {
demo d = (demo)obj;
return this.a = d.a;
}

结语

本文章是java成神的系列文章之一

如果你想知道,但是本文没有的,请下方留言

我会第一时间总结出来并发布填充到本文

java成神之——接口,泛型,类的更多相关文章

  1. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

  2. java成神之——注释修饰符

    注释修饰符 自定义注释 元注释 通过反射在runtime访问注释 内置注释 多注释实例 错误写法 使用容器改写 使用@Repeatable元注释 注释继承 使用反射获取注释 获取类的注释 获取方法的注 ...

  3. Java成神路上之设计模式系列教程之一

    Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...

  4. java成神之——enum枚举操作

    枚举 声明 枚举遍历 枚举在switch中使用 枚举比较 枚举静态构造方法 使用类来模拟枚举 枚举中定义抽象方法 枚举实现接口 单例模式 使用静态代码快 EnumSet EnumMap 结语 枚举 声 ...

  5. java成神之——集合框架之ArrayList,Lists,Sets

    集合 集合种类 ArrayList 声明 增删改查元素 遍历几种方式 空集合 子集合 不可变集合 LinkedList Lists 排序 类型转换 取交集 移动元素 删除交集元素 Sets 集合特点 ...

  6. java成神之——jaxb操作xml的基本使用

    JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...

  7. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

  8. java成神之——properties,lambda表达式,序列化

    Properties 加载defaults.properties文件 写Properties到xml文件 读Properties从xml文件 Lambda表达式 自定义 内置 sort方法中使用Lam ...

  9. java成神之——java常识

    java常识 简单DOS命令 java基础名词 java编译和运行流程 Eclipse常用快捷键 Eclipse相关操作 java基本数据类型 java基本数据类型转换 java常用运算符 java流 ...

随机推荐

  1. ultraedit使用记录

    ultraedit使用记录 10:57:33 在日常的工作中,我经常用keil进行程序的编写等工作,不过在编写过程中Keil对中文的支持不是很好,容易发生问题:同事推荐我用ultraedit进行程序的 ...

  2. linux上安装mysql以后root不能登录的解决办法

    今天心血来潮在linux上装了mysql,装完以后用命令mysql -uroot -p登录时提示 解决办法: 使用ps aux|grep mysql 查出pid 使用kill pid结束mysql进程 ...

  3. openvswitch的原理和常用命令

    一.Openvswitch工作原理 openvSwitch是一个高质量的.多层虚拟交换机,使用开源Apache2.0许可协议,由 Nicira Networks开发,主要实现代码为可移植的C代码.它的 ...

  4. 【Java】抽象类和接口

    一.抽象类和抽象方法 1.什么是抽象类 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容. 但是普通类中不能有抽象方法, ...

  5. WCF基础:绑定(三)

    在WCF绑定体系中,绑定创建绑定元素,绑定元素创建绑定监听器/绑定工厂,绑定监听器/绑定工厂创建信道. WCF中绑定是有多个信道相连组成的信道栈,在这个信道栈中必须包含传输信道和编码信道,而且传输信道 ...

  6. 软工作业-wc(Python实现)

    GitHub地址:GitHub PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  30  40 · Esti ...

  7. springmvc跨域(转)

    跨域资源共享 CORS 详解  原文链接:http://www.ruanyifeng.com/blog/2016/04/cors.html   作者: 阮一峰 日期: 2016年4月12日 CORS是 ...

  8. 第2章 开始Flex

    * Flex开发中可用两种语言 1.MXML 2.ActionScript * Flex中使用两个组件集 1.MX (mx.*) 早期的Flex版本用到的组件集 2.Spark (spark.*) F ...

  9. Android 命令行模拟按键

    /***************************************************************************** * Android 命令行模拟按键 * 说 ...

  10. 【转载】GetAdaptersInfo函数在64位系统上返回ERROR_NOACCESS的有关问题

    From:http://www.educity.cn/wenda/351190.html GetAdaptersInfo函数在64位系统下返回ERROR_NOACCESS的问题 实际应用中一个程序在长 ...