面向对象2
快捷键:ctrl+o 选择重写的方法
1、final关键字
被final修饰的变量不可以被改写,被称为常量
被final修饰的方法不可以被改写
被final修饰的类不可以被继承
2、抽象
abstract修饰方法
抽象方法:使用abstract来修饰的方法,抽象方法没有方法体,直接;结束
抽象类:如果类中是抽象方法,这个类必须是抽象类。
语法:
- public abstract class Chouxianglei {
public abstract void fulei(); - 没有方法体
}
特点:
1、抽象类不能创建对象,抽象来没办法实例化
2、抽象类的子类写方法,必须重写父类中的方法,如果不重写,子类必须也是改成抽象类
3、父类抽象类,强制要求子类重写抽象类中的所有方法,一个不能少,用于规范子类必须拥有的动作方法
4、抽象类可以有正常的方法
父类:抽象
public abstract class Chouxiang {
public abstract void eat();
}
-----------------------------------------------
子类:重写方法
public class Zilei extends Chouxiang {
@Override
public void eat(){
System.out.println("猫吃鱼");
}
---------------------------------------------------
测试:正常调用
public static void main(String[] args) {
//Zilei car=new Zilei();
//多态性,父类引用子类的方法,可以调用子类中的重写的方法
Chouxiang car1=new Zilei();
//会报错出抽象类无法实例化
//Chouxiang car2=new Chouxiang();
//car.eat();
car1.eat();;
}
}
运行:
猫吃鱼
3接口
1、接口实际就是一种特殊的出抽象类
2、@Override 重写
- 快捷键:右键->Generate…->Override Methods…->ctrl键选择重写内容
3、接口使用interface来声明
4、 能继承接口的只能是接口
5、接口和类是实现关系,关键字 implement实现,类可以实现接口
implements实现,与继承extends,类似的功能
6、类只能单独继承,接口 支持多实现多个接口,
7、接口具有多态性,通过接口可以把不相关的东西进行统一整合
特点:
1、接口中所以的方法都是抽象方法,不可以有正常方法。
2、接口中所以的变量都是全局静态常量不可以改变,接口的所有内容都是公开的,可以在外类中访问
接口:抽象
/**
* 接口和类是实现关系
* @author xhj
* @version 1.0.0 2022/4/24 下午8:43
*/
//接口用interface来声明,已经不再是class类了
public interface Jiekou {
//接口中所以的方法都是抽象方法,可以省略掉abstract
//public abstract void getmoney();是完整写法 public abstract 可以不写
void getmoney();
}
--------------------------------------------------------------------------
实现类:子类
public class Valuable implements Jiekou{
//必须要实现抽象方法
@Override
public void getmoney(){
System.out.println("黄金可以换钱");
}
}
--------------------------------------------------------------------------
测试:
public class Test {
public static void main(String[] args){
Valuable g =new Valuable();
//接口也具有多态性,接口引用实现类
Jiekou j=new Valuable();
g.getmoney();
j.getmoney();
}
}
运行:
黄金可以换钱
黄金可以换钱
接口支持多实现多个接口
一个对象可以用多种不同的接口类型来表示,体现接口具有多态性,以及多实现性
/**
* @author xhj
* @version 1.0.0 2022/4/24 下午8:43
*/
创建一个接口1:
抽象,值钱有价值
//接口用interface来声明,已经不再是class类了
public interface Jiekou {
//public abstract void getmoney();是完整写法 public abstract 可以不写
void getmoney();
}
---------------------------------------------------------------------------
创建一个接口2
抽象,受到保护
public interface Protectable {
void cang();
}
------------------------------------------------------------------------
创建一个动物类。
public class Animal {
public void eat(){
System.out.println("动物会吃");
}
}
--------------------------------------------------------------------------
建立一个对象熊猫
首先继承于动物类,实现 implements 值钱接口,受保护接口
public class Panda extends Animal implements Jiekou, Protectable{
//都需要重写继承父类,实现值钱,受保护
@Override
public void eat() {
System.out.println("熊猫吃竹子");
}
@Override
public void getmoney() {
System.out.println("可以换钱");
}
@Override
public void cang() {
System.out.println("保护起来");
}
}
--------------------------------------------------------------------------
测试:
public class Test {
public static void main(String[] args){
一个对象可以用四种不同的类型来表示,提现接口具有多态性,以及多实现性
,通过接口可以把不相关的东西进行统一整合
Panda p= new Panda(); //实例化熊猫
Animal ani=new Panda(); //父类动物引用,向上转型,
Jiekou J=new Panda(); //接口值钱引用,向上转型
Protectable pro=new Panda();{//接口受保护引用,向上转型
p.cang();
p.eat();
p.getmoney();
ani.eat(); //动物类型只能调用吃的方法
J.getmoney();//值钱类型只能调用值钱的方法
pro.cang(); //受保护型只能调用保护的方法
}
}
}
Object类
在java中所以的类都继承object
object是一个类,所以类的根
我们写的类默认继承object
ctrl键+object进入类
equals方法
==:判断左右两端的数据是否一致
equals: object类为我们提供的一个方法,用来判断两个对象是否相等,优点是可以自己重写这个方法不用obiect提供的方法。
字符串的判断用equals来判断
==
equals比较方法
可以自己定义equals的比较方法
toString方法
toString 对一个对象用字符串来描述,该怎么描述
toString 是object默认的方法,可以重写原本是包名+类名+内存地址

hashcode值
通过改变hashcode值内存地址改变使==成立