对昨天内容的补充
java的三大特性
类的继承
*类继承的语法格式: 【修饰符】 class 子类名 extends 父类名{
程序核心代码
}
*注意事项:
1.类支持单继承:一个类只能有一个父类。(一个孩子只能继承一个爸爸的财产)
2.多个类可以继承同一个父类。(一个父亲的财产可以有不唯一个子女继承)
3.支持多层继承:子类继承父类,父类继承他的父类。
*重写父类方法:
1.父类中私有方法不能被重写。因为父类私有方法子类根本无法继承。
2.父类中方法有final修饰的不能被重写
3.子类所重写的方法的访问修饰符必须高于或者等于父类的访问修饰符。
—————————————————————————————————————
重写method1方法,返回值为派生类
重写method2方法,子类的访问修饰符高于父类的访问修饰符
import java.util.ArrayList;
public class XiaoMing extends Person{
@Override
public ArrayList method1() {
return null;
}
@Override
public ArrayList method2() {
return super.method2();
}
@Override
void method3() {
super.method3();
}
}
object类
—————————————————————————————————————
在JAVA中所有的类都是Object的直接子类或间接子类
一切皆为对象: Object
所有类的对象都可以声明成Object引用
Object obj = new Student();Object obj = new Person();
—————————————————————————————————————
*equals方法的作用:
public class Computer {
private String name;
private String address;
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj instanceof Computer){
Computer c = (Computer)obj; //向下转型
//有可能报控制正异常
if(c.name.equals(this.name) && c.address.equals(this.address))
return true;
return false;
}
return false;
}}
—————————————————————————————————————
*getClass方法的作用:
Computer computer1 = null;
computer1 =new Computer("联想");
System.out.println( computer1.getClass());
class com.xja.demo.Computer
—————————————————————————————————————*hashCode方法的作用
同一个对象的hashcode一定相同,不同的对象可能会生成相同的hashcode值。
不能根据hashcode值判断对象是否相等,但可以两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。
————————————————————————————————————
finnal关键字
特点:
1.final修饰类的时候不能被继承。
2.修饰方法的时候不能被重写。
3.修饰属性的时候不能被修改,是个常量。
抽象类和接口
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200403110743410.png
接口的含义:接口就是只有一个抽象方法和常量的“类”。但在java8以后可以有静态方法和默认方法。
接口使用interface关键字来声明一个类,同时接口不能创建对象。如果用接口来声明创建对象时只能用接口中的变量。
一个类实现接口时,必须实现接口中的所有抽象方法。
实现接口使用implements 关键字。
多态
成员函数在多态调用时,编译看左,运行看右;
成员变量:无论编译还是运行,都看左(引用型变量所属的类)。
静态成员函数的特点:无论编译还是运行,都看左边。
lambda 表达式
ambda 的基本结构为 (arguments) -> body,有如下几种情况:
参数类型可推导时,不需要指定类型,如 (a) -> System.out.println(a)
当只有一个参数且类型可推导时,不强制写 (), 如 a -> System.out.println(a)
参数指定类型时,必须有括号,如 (int a) -> System.out.println(a)
参数可以为空,如 () -> System.out.println(“hello”)
body 需要用 {} 包含语句,当只有一条语句时 {} 可省略
(参数类表)->{
方法体
}
// 如果方法中只有一句代码,那么“{ }”也可以省略
Comparator<String> c =new Comparator<String> {
public int compare(Stirng o1,String o2){
return o1.length-o2.length;
}
}
Comparator<String> c = (o1,o2) -> {
return o1.length-o2.length;
}
// 如果方法最终使用return关键字返回,那么可以忽略“{ }”时,
// return关键字也要一同忽略
Comparator<String> c = (o1,o2) ->o1.length-o2.length;
方法中含有参数时使用lambda
参数是不需要指定类型的,编译器会根据代码分析出类型
throw关键字
import java.util.Objects;
public class Demo01 {
public static void main(String[] args) {
int [] arrayA =null;
int index = 6;
f1(arrayA,index);
}
public static void f1(int [] arrayA,int index){
/*if(arrayA==null){
throw new NullPointerException("数组空指针异常");
}*/
Objects.requireNonNull(arrayA,"数组空指针异常");
if(index>arrayA.length-1||index<0){
throw new ArrayIndexOutOfBoundsException("越界异常");
}
}
}