在面向对象中,所有的对象都是可以通过类创建(描述的) 。反过来说并不是所有的类都能创建对象
如果一个类中没有足够的信息来描述一个对象的话,那么这个类叫抽象类
抽象类声明
在Java中使用abstract修饰的类叫抽象类
在Java中使用abstract修饰的方法叫抽象方法
语法格式:
abstract class Person {
//正常类的属性
String name;
//普通的成员方法
public void eat () {
System.out.print("吃饭");
}
//抽象方法 没有方法体的方法 没有大括号的
public abstract void sleep ();
}
例子:
package com.qf.abstractTest;
abstract class Person {//抽象类
//抽象类中可以有属性 方法 抽象方法
public void eat () {//普通方法
System.out.println("吃饭啊");
}
//声明一个抽象方法 abstract 修饰符
//是一个不完整的方法, 完整方法应该带方法体
public abstract void test (int a);
}
//The type Man must implement(实现) the inherited abstract method Person.test()
//在普通类中 Man中,必须可以实例化的。所以Man所有的信息都要时完整的
//必须去重写 父类中 抽象的方法
class Man extends Person{
@Override
public void test(int a) {//是重写的 抽象的类的抽象方法
System.out.println( a + "这个是子类重写的的抽象父类的抽象的方法");
}
}
public class Demo1 {
public static void main(String[] args) {
//抽象类不能创建对象 咋办? 只能 被继承
// Person person = new Person();
Man man = new Man();
man.eat();
man.test();
}
}
抽象类的详解
1.如果一个类中有抽象方法,那么这个类一定是抽象类
2.抽象方法是一个没有方法体的方法,是一个不完整的方法
3.抽象类中能有普通方法吗? 可以
4.抽象类能被实例化吗? 不能
5.抽象类不能被实例化,然后可以使用普通类去继承抽象类
6.在子类中 必须去重写父类的所有的抽象方法,让抽象方法变得有意义
7.在抽象类中,非抽象的方法能不能在子类被重写的,可以的
8.一个抽象类可以继承另外一个抽象类
9.一个抽象类也可以继承一个非抽象的类
package com.qf.abstractTest;
class Cell {
}
abstract class Monkey1 extends Cell{
public abstract void shout();//叫的方法
}
abstract class Person1 extends Monkey1{
public abstract void run();
// public abstract void jump() {//使用abstract修饰的方法 一定不要带方法体
//
// }
public void sing() {
System.out.println("唱歌");
}
}
//普通类Man1要去重写它爹,和它爷 和他祖宗的所有的抽象方法
class Man1 extends Person1 {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("撒丫子跑路");
}
@Override
public void sing() {
System.out.println("嗷嗷叫");
}
@Override
public void shout() {
// TODO Auto-generated method stub
System.out.println("嘎嘎乱叫");
}
}
public class Demo2 {
public static void main(String[] args) {
//Person1 person1 = new Person1();
}
}
练习:
抽象类:
Animal
paly(); 抽象的
eat();抽象的
sleep;正常方法
Panda 去继承Animal
Cat 去继承Animal
对象调用方法 执行打印的结果!!!
package com.qf.abstractTest;
abstract class Animal {
public abstract void play();
public abstract void eat();
public void sleep() {
System.out.println("睡觉");
}
}
class Pandas extends Animal {
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("爬树");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃竹子");
}
@Override
public void sleep() {
System.out.println("树上睡");
}
}
class Cat extends Animal {
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("玩狗");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃鱼");
}
@Override
public void sleep() {
System.out.println("趴着睡");
}
}
public class Demo3 {
public static void main(String[] args) {
Pandas pandas = new Pandas();
pandas.play();
pandas.eat();
pandas.sleep();
Cat cat = new Cat();
cat.eat();
cat.play();
cat.sleep();
}
}