1、面向对象定义
对象和类是java中最基本的两个概念,可以说撑起了面向对象编程(OOP)的一片天。
创建对象时需要用到new 关键字。
初始化对象(给字段赋值) :最标准的做法是通过构造方法初始化,直接在new的时候把参数传递过去。
2、抽象方法
没有方法体的方法被称为抽象方法,它总是在抽象类中声明,这意味着如果类有抽象方法的话,这个类就必须是抽象的,可以使用abstract关键字创建抽象方法和抽象类。
java接口和java抽象类最大的区别就在于抽象类可以提供某些方法的部分实现,而接口不可以(就是接口中只能定义方法,而不能有方法的实现,而在抽象类中则可以既有方法的具体实现,也可以没有具体实现的抽象方法)
如果向一个抽象类中加一个新的具体方法(注意不是抽象方法),那么它的所有子类就能一下子得到这个新方法,而接口做不到这一点,如有向接口中加一个新方法,则所有实现这个接口的类就无法通过编译了,因为你必须让它的每一个实现类在实现这个方法才行。
package com.example.rookie.abstractdemo;
/**
* 抽象方法:方法前加上abstract关键字,去掉大括号,直接分号结束。
* 抽象类:抽象方法所在的类,必然是抽象类,在class前加上abstract即可。
* <p>
* 如何使用抽象类和抽象方法:
* 1、不能直接创建 new抽象类对象
* 2、必须使用一个子类来继承抽象父类
* 3、子类必须重写抽象父类中的所有的抽象方法(普通类),也可以无须重写所有方法(抽象类)
* 4、创建子类对象进行使用
* <p>
* 动物抽象类
*
* @author
* @date 2021/9/3 15:26
*/
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
public Animal() {
System.out.println("父类构造方法执行:");
}
}
package com.example.rookie.abstractdemo;
/**
* 未重写父类Animal抽象类的sleep抽象方法,编译无法通过而报错
* 解决办法:将子类Cat也写成抽象类即可运行
*
* @author
* @date 2021/9/3 15:28
*/
public abstract class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫爱吃鱼");
}
public Cat() {
System.out.println("子类构造方法执行!");
}
}
package com.example.rookie.abstractdemo;
/**
* 未重写父类Animal抽象类的sleep抽象方法,编译无法通过而报错
* 解决办法:将子类Cat也写成抽象类即可运行
*
* @author
* @date 2021/9/3 16:54
*/
public abstract class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗爱吃肉");
}
public Dog() {
System.out.println("子类构造方法执行!");
}
public void run() {
System.out.println("这是一个普通方法!");
}
}
package com.example.rookie.abstractdemo;
/**
* 子类
*
* @author
* @date 2021/9/3 15:33
*/
public class CatOne extends Cat {
@Override
public void sleep() {
System.out.println("呼呼大睡");
}
}
package com.example.rookie.abstractdemo;
/**
* 子类
*
* @author
* @date 2021/9/3 16:58
*/
public class DogOne extends Dog {
@Override
public void sleep() {
System.out.println("酣然大睡!");
}
}
package com.example.rookie.abstractdemo;
/**
* 测试类
*
* @author
* @date 2021/9/3 15:41
*/
public class DemoMain {
public static void main(String[] args) {
CatOne catOne = new CatOne();//普通类,可以直接new
catOne.eat();
catOne.sleep();
System.out.println("=================");
DogOne dogOne = new DogOne();
dogOne.eat();
dogOne.sleep();
dogOne.run();//是dog抽象类新加的有具体实现的方法
}
}
以上代码的运行结果如下(当在抽象类中新加具体的实现方法时,比子类无须更改就可以直接使用这个方法,而在接口里新增方法,则需要增加实现才行):