Java中抽象类的理解

抽象类:

  不能使用new方法进行实

  例化的类,即没有具体实

  例对象的类,只可以通过

  抽象类派生出新的子类,

  再由其子类来创建对象;

抽象方法:

  抽象方法就是以 abstract

  修饰的方法,这种方法只

  声明返回的数据类型,方

  法名称和所需要的参数,

  没有方法体,也就是说抽

  象方法只需要声明,当一

  个方法为抽象方法时,意

  味着这个方法必须被子类

  的方法所重写,否则其子

  类的该方法仍然是抽象的;

----------------------------------------

抽象类的特点:

  A:抽象类和抽象方法必须用abstract关键字修饰;

  B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类;

  C:抽象类不能直接实例化;(可以通过子类(重写方法后的子类)的多态方式实例化);

    1.它不是具体的;

    2.抽象类有构造方法,用于子类访问父类数据的初始化;

  D:抽象类的子类;

    1.如果不想重写抽象方法,该子类必须是抽象类;

    2.成为具体类则必须重写所有的抽象方法;

----------------------------------------

下面给出一个抽象类的实例:

----------------------------------------

 1 public class AbstractDemo {
 2     public static void main(String[] args) {
 3         //Tree t = new Tree();//抽象的子类不能实例化;Error!
 4         Grass g = new Grass();//非抽象类的子类实例化
 5         g.grow();
 6         System.out.println("-------------");
 7         Plant p = new Grass();//多态的方式
 8         p.grow();
 9     }
10 }
11 abstract class Plant{
12     public abstract void grow();
13 }
14 
15 /*
16  * 1.子类是抽象类;
17  */
18 abstract class Tree extends Plant{
19     Tree(){
20         System.out.println("tree");
21     }
22 }
23 
24 /*
25  * 2.子类不是抽象类,则必须重写所有抽象方法;
26  */
27 class Grass extends Plant{
28     Grass(){
29         System.out.println("grass");
30     }
31     public void grow(){
32         System.out.println("grass growing");
33     }
34 }

----------------------------------------

抽象类的成员的特点:

  A:成员变量

    1.既可以是变量,也可以是常量;

  B:构造方法

    1.用于子类访问父类数据的初始化;

  C:成员方法

    1.既可以是抽象的,也可以是非抽象的;

抽象类成员方法特性:

  A:抽象方法

    1.强制要求子类做的事情;

  B:非抽象方法

    1.子类继承的事情,提高代码复用性;

----------------------------------------

下面给出一个抽象类的成员的

实例:

----------------------------------------

 1 public class AbstractMember {
 2     public static void main(String[] args){
 3         
 4         Phone p = new Vivo();    //这里是多态;(用来实例化抽象类)
 5         p.height = 1460;        //1600 -> 1460
 6         System.out.println(p.height);
 7         System.out.println(p.width);
 8         System.out.println("-----------");
 9         p.call();        //vivo call
10         p.method();        //vivo method
11         
12         
13         
14     }
15 }
16 
17 abstract class Phone{
18     public int height = 1600;
19     public final int width = 960;
20     public Phone(){}
21     public Phone(String name,int count){}
22     /*成员方法*/
23     public abstract void call();//抽象成员方法;
24     public void method(){        //非抽象成员方法;
25         System.out.println("phone method");
26     }
27     
28 }
29 //非抽象子类,重写抽象父类的抽象方法:
30 class Vivo extends Phone{
31     
32     public void call(){
33         System.out.println("vivo call");
34     }
35     public void method(){
36         System.out.println("vivo method");
37     }
38     
39 }

转载于:https://www.cnblogs.com/qmdx00/p/7456480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值