Java面向对象编程——抽象类和接口
定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征。
抽象类:
如果一个类没有足够的信息去描述一个具体的对象,那我们就称之为抽象类。
语法格式:
public abstract class 类名{
}
案例代码:
package Demo01;
/**
* @version 1.0
* @author: jiazhihao
* @date: 2021-05-13 10:31
*/
public class Demo01 {
// 定义动物抽象类
public abstract class Animal{
}
}
抽象方法:
有了抽象类,类中就要有与之对应的抽象方法。抽象发发就是用abstract修饰的方法,这种方法值声明返回的数据类型,方法名称和所需要的参数,没有方法体。也就是说在抽响雷中声明抽象方法时,值需要声明方法,不需要定义方法体。子类在继承父类时,必须重写父类的抽象方法,这也是抽象方法存在的意义。
语法格式:
public abstract 返回值类型 方法名(参数列表);
案例代码:
package Demo01;
/**
* @version 1.0
* @author: jiazhihao
* @date: 2021-05-13 10:31
*/
public class Demo01 {
// 定义动物抽象类
public abstract class Animal{
public abstract void go(); // 名为go的抽象方法,注意方法没有大括号
}
}
抽象类和抽象方法具体该怎么使用? 抽象方法的作用是 什么?
案例代码
package Demo01;
/**
* @version 1.0
* @author: jiazhihao
* @date: 2021-05-13 10:31
*/
public class Demo01 {
// 定义动物抽象类
public abstract class Animal{
public abstract void go(); // 名为go的抽象方法,注意方法没有大括号
}
public class Demo02 extends Demo01 {
public void go(){
System.out.println("鸟飞的块");
}
}
public class Demo03 extends Demo01{
public void go(){
System.out.println("狗跑的块");
}
}
}
测试类:
package Demo01;
/**
* @version 1.0
* @author: jiazhihao
* @date: 2021-05-13 10:42
*/
public class Demo04 {
public static void main(String[] args) {
Demo02 d = new Demo02();
d.go();
Demo03 demo03 = new Demo03();
demo03.go();
}
}
通过上面的代码我们可以总结:
定义抽象类就是用于继承的。和一般类的继承相比,子类继承抽象类必然会实现抽象方法。由于抽象方法都是没有方法体的,也就是说,抽象方法并没有写死,我么可以根据自己的需求去写
抽象类是一种模板式设计,通常是对同类事物相对具体的抽象。抽象类通常包含抽象方法、实体方法、属性变量。。我们在使用抽象方法和抽象类时,需要注意以下几点。
(1)包含抽象方法的类一定时抽象类。
(2)抽象类中的方法不一定都是抽象方法。抽象类也可以没有抽象方法
(3)构造方法不能声明为抽象方法
(4)abstract 不能与private 、static、final、native并修饰同一个方法
final修饰符
使用:
显示生活中,我们的身份证一经确定,身份证号就不能在此修改了。那我们Java中某些数据是定值,为了保证计算的正确性,不能在被修改,应该怎末办呢?这时候就用到了final修饰符,表示最终的。
final使用有以下几种情况。
(1)修饰类
(2)修饰方法
(3)修饰对象和变量
修饰类:
-
被final修饰过的类不能被继承
-
.因为不能被继承,所以此类中的所有方法默认都是final修饰
-
该类如果不需要子类,不需要被扩展,类中的方法不允许被重写,就是用final
修饰方法:
被final修饰的方法可以被继承,不能被覆盖重写
修饰对象和变量:
final修饰一个对象,那么这个对象的引用不能变,但是值是可以变的。如果是基础类型,那么值不可变。
案例代码:
package Demo02; ; /** * @version 1.0 * @author: jiazhihao * @date: 2021-05-13 10:31 */ public class Demo01 { public String name; public Demo01(String name) { super(); this.name = name; } public String getName() { return name