一.虚方法和非虚方法
虚方法:可以重写的方法
非虚方法:不可以重写的方法:静态方法 构造方法 私有方法
二.final
final修饰的类不能被继承 (太监类)
final修饰的变量 是常量
final修饰的方法 不能被重写
final修饰的对象 地址值不能被改变
三.object类
object类是所类直接或者间接的父亲
如果一个类没有显示的继承另一个类 则此类 默认继承自object类
四.native
本地的 本国的 原生的
1.native 只能是修饰方法
2.native方法没有方法体
3.java有些功能无法实现 需要借助c/c++实现 native方法
4.native方法被调用时 在本地方法栈中开辟空间
5.native方法是可以被重写的
五.Object类中方法
toStiring():直接快速输出对象的属性值 操作:右键找到Generate里面有
public class Test {
public static void main(String[] args) {
Person person = new Person("李白", 18);
String s = person.toString();
System.out.println(person); //重写前运行com.atguigu.review.Person@4554617c
//重写toString方法后运行结果Person{name='李白', age=18}
}
class Person{
public Person(String name, int age) {
this.name = name;
this.age = age;
}
String name;
int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
getClass():获取运行时类型
Animal ani =new Cat();
ani.getClass();
hashCode():返回该对象的哈希码
equals():
==:1.比较基本数据类型 比较的是实际的值
2.比较的是引用数据类型 比较的是地址值
equals():
1.重写前 比较的是地址值
2.重写后 比较的是属性值
六.抽象
抽象的意义:
1.在创造一个事物之前我们大致模糊的把将要编写的类(实例)想象成一个大致的类
但其本身不能创造实例
2.规范子类 如果你将要继承我那么就必须继承我所有的要求你做到的事,当然你也可以自主拓展
如下:
public abstract class Animal {
abstract void eat();
abstract void sleep();
}
class Cat extends Animal{
public void catchMouse(){
}
@Override
void eat() {
}
@Override
void sleep() {
}
}
抽象的实现
//定义抽象类
[权限修饰符] abstract class 类名{}
//如何定义抽象方法
[权限修饰符] abstract 返回值类型 方法名(形参列表){}
抽象使用时注意点:
1.一个类 必须实现父类(抽象类)所有抽象方法 否则 此类也要变成抽象类
2.抽象类不可创建对象
3.抽象类可以存在普通的资源(方法 属性)
4.如果一个类中有抽象方法 那么此类 一定为抽象类
5.抽象类中可以没有抽象方法
七.接口
接口的作用:
1.定义规范 如果你是 则必须能
2.用来表述 现实社会中 has a 的关系
如何定义接口:
[权限修饰符] interface 接口名{
常量;//public static final 修饰
1.抽象方法;//public abstract 修饰
void show();
2.默认方法://public
default 返回值类型 方法名:
3.静态方法//public
static 返回值类型 方法名:
}
使用接口及其注意点:‘
1.可以让一个类实现多个接口 (一个类可以先继承一个父类然后再实现多个接口,顺序不能变。)
class 类名 implements 接口名1,接口名2{}
2.如果一个类实现了接口 那必须重写接口中所有的抽象方法 否则 也要将此类变为抽象类
3.接口可以继承
接口1 extends 接口2,接口3{}
如果一个类实现了接口1,那么它不仅要重写接口1中的抽象方法 也要重写接口2,3的抽象方法
4.当一个类实现了两个接口 内部有同名的 默认方法 则必须要重写
4.1.直接重写 调用的是重写后的方法
4.2.在重写的方法中调用:
接口名.super.方法名();