如何设置网站佛山搜索引擎优化
学习资料 菜鸟教程
https://www.runoob.com/java/java-interfaces.html
继承|Override/Ovverload|多态|抽象类|封装|接口|枚举
继承 创建分等级层次的类,子类继承父类的特征、行为、方法
-  
class 父类{ } class 子类 extends 父类{ super(); } 
一些性质
-  
Java 不支持多继承(一个类继承2个父类),但支持多重继承。
 -  

 -  
子类拥有父类非private的属性、方法。缺点是耦合度高代码独立性越差。
 -  
extends和implements关键字
- 所有的类都是继承于java.lang.Object,默认继承Object
 - extends 
- 单一继承,一个子类只能拥有一个父类
 
 - implements 类继承接口可多继承 
- 使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(,)
 -  
public interface A {public void eat();public void sleep(); }public interface B {public void show(); }public class C implements A,B { } 
 
 -  
super与this关键字
- super 
- 对父类成员的访问,用来引用当前对象的父类。
 
 - this 
- 对自己的引用,引用当前对象(自己的方法或构造函数所属的对象实例)
 
 
 - super 
 -  
final关键字
- 修饰变量(类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
 - 定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写。 
- 声明类: final class 类名 {//类体}
 - 声明方法: 修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
 
 
 -  
构造器
- 子类不继承父类的构造器(构造方法和构造函数)。
 - 继承构造器的方法 
- 无参构造器 直接继承
 - 带参构造器,用super来继承参数。 
-  
// 带参数构造器,调用父类中带有参数的构造器public SubClass(int n) {super(300);System.out.println("SubClass(int n): " + n);this.n = n;} 
 -  
 
 
 
Java重写(Override)和Java重载(Overload)
重写(Override)
- 本质:指子类定义了一个与其父类相同外壳(相同名称、参数列表、返回类型)的方法
 - 自定义父类方法,个性化
 - 返回类型可以不同,但必须是父类返回值的派生类
 - 声明为final的方法不能被重写;声明为static的方法不能被重写但能被再次声明
 - 子类和父类是否在一个包 
- 在,可以重写除了声明private和final的方法
 - 不在,重写父类声明为public和protected的非final方法
 
 - 构造方法不能被重写。
 - super. 子类如果想调用父类的方法,用这个
 
重载(Overload)
- 在一个类里面,方法名字相同,而参数不同,返回类型可以不同。重载方法有独一无二的参数类型列表。
 - 构造器的重载
 - 规则 
- 必须改变参数列表(个数类型不一样)
 - 可以声明更广的检查异常
 
 
重写和重载的区别
- 参数列表、返回类型、异常、访问
 - 重载:参数列表必须修改|其他的可以修改
 - 重写:参数列表、返回类型一定不能修改|异常和访问不能更高广。
 
Java多态
-  
核心:同一个行为具有多个不同表现形式或形态的能力;多态是同一个接口,使用不同的实例而执行不同操作。
 -  
3个必要条件
- 继承
 - 重写
 - 父类引用指向子类对象:Parent p=new Child();
 

 -  
多态的转型
- 向上转型(Upcasting) 将子类对象赋值给父类引用。 
- 例如:Animal a = newCat(); // 向上转型 **
a.eat(); // 调用的是 Cat 的 eat** - 通过a只能调用Animal类中声明的方法,但实际运行时会调用Cat类的重写版本(多态的体现)。父类引用只能访问父类中声明的方法和属性,不能直接访问子类特有的方法或属性。
 
 - 例如:Animal a = newCat(); // 向上转型 **
 - 向下转型(Downcasting) 
- 父类引用(指向子类对象)重新转型为子类类型引用,以便访问子类的特有方法或属性。
 - Cat c=(Cat)a; c.work();
 
 
 - 向上转型(Upcasting) 将子类对象赋值给父类引用。 
 -  
虚函数
- 如果不希望某个函数具有虚函数特性,加final
 
 -  
多态的实现方式
- 重写
 - 接口 (类比为插座)
 - 抽象类和抽象方法
 
 
抽象类
- 不充分的信息来描绘一个具体的对象;不能实例化对象,必须被继承。
 - public abstract class定义抽象类,可以【继承抽象类】的成员方法、成员类
 - 【抽象方法】 
- 抽象方法有特殊的成员方法,和具体的abstract子类实现。
 - 只包含方法名,没有方法体
 - 子类继承了抽象类,任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
 - 抽象类不能被实例化
 - 抽象类中不一定包含抽象方法,但有抽象方法的类必定是抽象类。包含抽象方法的类必须是抽象类。
 - 构造方法,类方法(static)不能声明为抽象方法。
 
 
封装
- 作用:良好的封装减少耦合;类内部的结果可以自由修改;可以对成员变量进行更精确的控制;隐藏信息,实现细节。
 -  
public class Person{private String name;//实例变量和局部变量的冲突private int age;public int getAge(){return age;}public String getName(){return name;}public void setAge(int age){this.age = age;}public void setName(String name){this.name = name;} } - 步骤 
- 修改属性的可见性来限制对属性的访问。(private)
 - 对每个值属性提供对外的公共方法访问
 
 - 任何要访问类中私有成员变量的类都要通过【getter和setter】方法。
 
接口
-  
抽象方法的集合,interface
 -  
一个类通过继承接口的方式,来继承接口的抽象方法。
 -  
类描述对象的属性和方法,接口则包含类要实现的方法。 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
 -  
接口无法被实例化,但可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
 -  
特性
- 接口中所有的方法必须是抽象方法
 - 接口不能包含成员变量,除了 static 和 final 变量。
 - 接口不是被类继承了,而是要被类实现。
 - 接口的方法是隐式抽象,接口的变量被隐式指定为public static final变量。
 - 接口中的方法是共有的
 
 -  
抽象类和接口的区别
- JDK1.8以后,接口有静态方法和方法体了。
 - 接口中的成员变量只能是public static final类型的。
 - 接口中不能含有静态代码块以及静态方法。
 - 一个类只能继承一个抽象类,一个类可以实现多个接口。
 - 接口不能包含成员变量,除了 static 和 final 变量。
 
 -  
接口Code
-  
1
[可见度] interface 接口名称 [extends 其他的接口名] {// 声明变量// 抽象方法 } -  
2
/* 文件名 : Animal.java */ interface Animal {public void eat();public void travel(); } 
 -  
 -  
接口的实现
- 当类实现接口的时候,类要实现接口中所有的方法,否则,类必须声明为抽象的类。
 - 类使用implements来实现接口。
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ... - publicclassMammalIntimplementsAnimal{
 
 -  
重写接口中声明的方法
- 不能抛出强制性异常,只能在接口中或者继承接口的抽象类中抛出该强制性异常。
 - 保持方法名一致,返回值类型一致。
 - 如果实现该接口的类是抽象类,就没必要实现该接口的方法。
 
 -  
规则
- 一个类可以同时实现多个接口
 - 一个接口能继承另一个接口 extends
 
 -  
接口的多继承
- public interface Hockey extends Sports,Event
 
 -  
标记接口
 -  
没有包含任何方法和属性的接口,打个标签是什么类型。
 -  
用处
- 公共的父接口
 - 向一个类添加数据类型
 
 
Java枚举(enum)
- 特殊的类,一组常量 
- 1
enum Color { RED,GRENN,BLUE; } public class Test{ public static void main(String[] args) { Color c1=Color.RED; System.out.println(c1);}} - 内部类也可以使用枚举
 - 迭代枚举元素
for(Color myVar:Color.values()){ System.put.println(myVar);)} - 在switch中使用枚举类
 
 - 1
 - values(),ordinal()和valueOf()方法 
- enum定义的枚举类默认继承了ava.lang.Enum类,并实现了java.lang,Serializable和java.lang.Comparable两个接口
 - values()返回枚举类中所有的值
 - ordinal()找到每个枚举常量的索引,就像数组索引一样
 - valueOf()返回指定字符串值的枚举常量
 
 - 枚举类成员 
- 枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用private访问修饰符,所以外部无法调用。
 - 枚举可以包含具体方法、抽象方法。如果枚举类有抽象方法,则枚举类的每个实例都必须实现它。
 
 
