接口

接口定义

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. python:webbrowser

    import webbrowser webbrowser.open_new_tab('www.baidu.com')

  2. JSP的指令

    JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ directive attribute="value" %&g ...

  3. mysql中delete的表别名使用方法

    在 mapper.xml 中的 dynamicWhere 动态查询中使用了表别名,Delete 语句引用了动态查询,如下: <delete id="delete" param ...

  4. ViewPager实现图片轮翻效果

    很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的.今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的 ...

  5. 2017年终巨献阿里、腾讯最新Java程序员面试题,准备好进BAT了吗

    Java基础 进程和线程的区别: Java的并发.多线程.线程模型: 什么是线程池,如何使用? 数据一致性如何保证:Synchronized关键字,类锁,方法锁,重入锁: Java中实现多态的机制是什 ...

  6. 关键的OOP概念

    OOP的好处  1.封装, 2继承, 3多态. 多态性是指相同的操作或函数.过程可作用于多种类型的对象上并获得不同的结果.不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性. <? ...

  7. 【策略】一致性Hash算法

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...

  8. LG3391 【模板】文艺平衡树(Splay)

    题意 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 \(n,m ...

  9. 什么是镜头shading

    shading分为两种: Lens Shading:由于Lens的光学特性,Sensor影像区的边缘区域接收的光强比中心小,所造成的中心和四角亮度不一致的现象. color shading:由于LEN ...

  10. Java 程序员容易犯的10个SQL错误

    Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用“模式-模式”,举个例子,模式可 ...