抽象类概念
.在Java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,那么该类必须定义为抽象类
抽象类特点(官方说法)
.抽象类和抽象方法必须使用abstract关键字
示例
public abstract class 类名
public abstract void 方法名();
.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
.抽象类不能被实例化
.如何进行实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象多态
.抽象类的子类
.要么重写抽象类中的所有抽象方法
.要么是抽象类
抽象类特点(自己领悟)
.抽象类和抽象方法都必须使用abstract关键字来修饰
.抽象类里面是可以存放非抽象方法的(抽象类里面可以没有抽象方法)但是有抽象方法的类必须是抽象类
.抽象类不可被创建对象,也就是实例化,
(抽象类想要访问方法,就必须有使用多态的方法,也就是有继承关系,也就是使子类实例化,通过子类的继承关系,来访问到抽象类也就是父类)
.抽象类中的子类,要么重写抽象类中的抽象方法,要么也是抽象类
抽象类的成员特点
成员变量
.可以是变量
.也可以是常量
构造方法
.有构造方法,但是不能实例化
.那么,构造方法的作用是什么?用于子类访问父类数据的初始化
成员方法
.可以有抽象方法:限定子类必须完成一些动作
.也可以有非抽象方法:提高代码的复用性 代码的复用性,是由继承保证的
以下第一个案例有五个类,分别是animaldemo类 animal类 cat类 dog类
第二个案例有三个类,用来验证抽象类的成员特点
分别有animaldemo类 animal类 cat类
animaldemo类
package abstract抽象类;
public class animaldemo {
/*
抽象类
.在Java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,那么该类必须定义为抽象类
抽象类特点(官方说法)
.抽象类和抽象方法必须使用abstract关键字
示例
public abstract class 类名
public abstract void 方法名();
.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
.抽象类不能被实例化
.如何进行实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象多态
.抽象类的子类
.要么重写抽象类中的所有抽象方法
.要么是抽象类
抽象类特点(自己领悟)
.抽象类和抽象方法都必须使用abstract来修饰
.抽象类里面是可以存放非抽象方法的(抽象类里面可以没有抽象方法)但是有抽象方法的类必须是抽象类
.抽象类不可被创建对象,也就是实例化,
(抽象类想要访问方法,就必须有使用多态的方法,也就是有继承关系,也就是使子类实例化,通过子类的继承关系,来访问到抽象类也就是父类)
.抽象类中的子类,要么重写抽象类中的抽象方法,要么也是抽象类
抽象类的成员特点
成员变量
.可以是变量
.也可以是常量
构造方法
.有构造方法,但是不能实例化
.那么,构造方法的作用是什么?用于子类访问父类数据的初始化
成员方法
.可以有抽象方法:限定子类必须完成一些动作
.也可以有非抽象方法:提高代码的复用性 代码的复用性,是由继承保证的
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
//抽象类不是具体的,就不能创建对象,所以animal a = new animal();就会报错
// animal a = new animal();
// a.eat();
animal a = new cat();
a.eat();
a.sleep();//可以通过子类的对象实例化后 进行访问和调用,但是有个前提就是,必须有了继承关系之后
}
}
animal类
package abstract抽象类;
public abstract class animal {
// public void eat() {
// // TODO 自动生成的方法存根
// System.out.println("吃东西");
//
// }
//一个方法,要么有方法体,要么把他定义为抽象的
//抽象方法必须放到抽象类里面
public abstract void eat();
public void sleep() {
// TODO 自动生成的方法存根
System.out.println("睡觉");
}
}
cat类
package abstract抽象类;
public class cat extends animal {
@Override
public void eat() {
// TODO 自动生成的方法存根
System.out.println("猫吃鱼");
}
}
dog类
package abstract抽象类;
public abstract class dog extends animal{
}
第二个案例animaldemo类 animal类 cat类
animaldemo类
package abstract抽象类成员特点;
public class animaldemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
animal a = new cat();
a.eat();
a.show();
}
}
animal类
(可以看得出来,在这里面,我们写构造方法了,但是既然抽象类不能被实例化,构造方法的存在又有何意义呢?其实我们可以根据多态的方法,利用他的子类来创建对象,然后就可以根据构造方法进行赋值了)
package abstract抽象类成员特点;
public abstract class animal {
private int age =20;
private final String city="北京";
public void show() {
// TODO 自动生成的方法存根
age=40;
System.out.println(age);
// city="上海";
System.out.println(city);
}
public abstract void eat();
/**
* @param age
*/
public animal(int age) {
super();
this.age = age;
}
/**
*
*/
public animal() {
super();
}
}
cat类
package abstract抽象类成员特点;
public class cat extends animal {
@Override
public void eat() {
// TODO 自动生成的方法存根
System.out.println("猫吃鱼");
}
}
今天的文章Java abstract 抽象类的详解介绍分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33555.html