接口

接口定义

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. mysql数据库(三):查询的其他用法

    一. 查询—IN的用法 语法:select ... from 表名 where 字段 a in (值b, 值c, 值d...) 等价于 select ... from 表名 where 字段a=值b ...

  2. ZOJ 3488 Conic Section

    The conic sections are the nondegenerate curves generated by the intersections of a plane with one o ...

  3. SpringBoot_11_将springboot项目部署到外部tomcat上

    一.前言 二. 三.参考资料 如何将Spring Boot项目打包部署到外部Tomcat 2.SpringBoot 项目如何在tomcat容器中运行

  4. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...

  5. LeetCode OJ:Next Permutation(下一排列)

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  6. 简要谈谈javascript bind 方法

    最近去参加了场面试,跟面试官聊了很多JS基础上的东西,其中有个问题是谈谈对apply.call.bind的理解和区别.顿时一愣,apply.call我知道,经常用的东西,bind是什么鬼!!!好像见过 ...

  7. Activity的生命周期,BACK键和HOME对生命周期的影响

    下面这张图详细的描述了Activity的整个生命周期: 直接上代码,注意看注释: [java] view plaincopy public class HelloActivity extends Ac ...

  8. 伪元素:focus-within

    1.盒子边框的线条动画: <div class="cont"> <div class="bb"></div> </di ...

  9. docker 基本学习

    Docker的应用场景: 加速本地开发和构建流程,使其更加高效.更加轻量化.本地开发人员可以构建.运行并分享Docker容器.容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境. ...

  10. Spring字符编码过滤器

    1 <filter> 2 <filter-name>characterEncodingFilter</filter-name> 3 <filter-class ...