🔎继承和多态
🌻继承
作用:对共性的抽取,实现代码的复用
🌼一个简单的继承
class A { public String color; public int age; public static int size;//静态 } class B extends A { public String type; }
子类继承了父类的所有非静态成员(变量/方法)
🌼super关键字
代表父类对象的引用
❀用法
🌼super与this的区别
super()和this()都只能在构造方法的第一行使用,所以只能选择其中一个
super只能出现在子类方法或构造方法中
this没有父类也可以使用,super只能在含有父类情况下使用
🌼执行顺序
在继承关系上存在静态代码块,非静态代码块和构造方法
🌼访问修饰限定符
privatedefault(默认)protectedpublic
访问权限:public>protected>default>private
🌼final关键字
❀修饰变量(表示该变量不能修改)
final int a = 0; //a = 1;//修饰变量,表示为常量(不能修改)
❀修饰类(表示该类不能被继承)
final class A { } /*class B extends A { }*/
❀修饰方法(表示该方法不能被重写)
class C { public final void func() { } } class D extends C { /*@Override public void func() {//该方法不能被重写,因为父类的方法被final修饰 System.out.println("hello"); }*/ }
🌻多态
🌼向上转型
只能访问父类自己的成员(属性/方法),不能访问子类的成员(属性/方法)
class C { } class D extends C { } public class Test { public static C method() { return new D();//向上转型 } public static void main3(String[] args) { method(); } public static void func(C c) {//向上转型 } public static void main2(String[] args) { D d = new D(); func(d);//向上转型 } public static void main1(String[] args) { C c = new D();//向上转型 } }
🌼向下转型
class C { } class D extends C { } class E extends C { } public class Test { public static void main(String[] args) { C c = new D(); //E e = (E)c;//向下转型--不建议使用 if(c instanceof E) { E e = (E)c;//一定要使用建议搭配instance of 关键字 } } }
🔎抽象类和接口
🌻抽象类
特性
不能被实例化,被用于继承
包含抽象方法和非抽象方法
当一个非抽象类继承这个抽象类时,必须重写这个抽象类的抽象方法
抽象方法不能被private,final,static修饰
🌻接口
特性
成员变量默认是public static final修饰
成员方法默认是public abstract修饰
🔎String类
🌻字符串的不可变性
String是一种不可变对象
final表示String不可被继承,但仍可以修改字符串里的内容
那为什么String是一种不可变对象呢?
因为里面的字符是被private修饰的,是封装的(不能被访问)
🌻StringBuilder和StringBuffer
因为String的不可变性,为了方便字符串进行修改,可以使用StringBuilder和StringBuffer
StringBuilder和StringBuffer修改字符串内容时均不会创创建一个新的对象
String和StringBuilder类转换
String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
StringBuilder变为String: 调用toString()方法
🔎异常
🌻异常的简单分类
🌼编译时异常/受查异常(IOException)
🌼运行时异常/非受查异常(RuntimeException)
public static void main(String[] args) { char[] arr = null; System.out.println(arr); System.out.println("运行时异常--空指针异常"); }
🌻throw和throws的区别
throw代表抛出异常
throws代表声明异常,可用于编译(受查)异常,使其编译正常
🌻自定义异常
1.自定义异常类,然后继承自Exception 或者 RunTimeException
2.实现一个带有String类型参数的构造方法,参数含义:出现异常的原因
class WrokException extends RuntimeException{ public WrokException(String s) { super(s); } }
🔎总结










