java面向对象-------抽象

抽象类:

abstract:修饰符,只能修饰类和普通的方法

abstract关键字修饰的类就是抽象类,用abstract修饰的方法叫做抽象方法。在抽象类中允许方法不进行具体的实现。抽象方法不是一个完整的方法,只做方法的声明,没有方法体。

抽象类的作用:抽象类是为了实现多态,并优化继承结构。

例如 抽象类Pet:

package com.bxit1;

/**

 * 宠物的抽象类

 * @author QJ

 */

public abstract  class Pet {

private  String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Pet(String name) {

super();

this.name = name;

}

//抽象方法

public abstract  void eat();

}

子类:

package com.bxit1;

public class Pig extends Pet{

public Pig(String name) {

super(name);

// TODO Auto-generated constructor stub

}

   //实现父类的方法

@Override

public void eat() {

System.out.println("小猪在吃草");

}

}

说明:抽象类可能只提供一个类的部分实现,因此抽象类不能被实例化,抽象类可以有成员变量(成员变量也叫实例变量),以及一个或多个构造方法,这些构造方法不能被客户端调用来创建实例,抽象类的构造方法可以被子类用super来调用。

抽象类可以同时拥有抽象方法和具体方法,抽象类使所有的子类都可以有一些共同的实现,而不同的子类可以在此基础上对抽象方法做具体的实现。

注意: 1抽象方法只能定义在抽象类中。

            2抽象类中不一定有抽象的方法。

            3抽象类中可以有具体的方法和自己的私有属性。

            4 抽象类不可以被实例化(不能创建对象),它是专门用来被继承的。

            5当一个类继承一个抽象类,该类必须实现抽象类中的抽象方法(前提条件:抽象类中有抽象方法)。

           6抽象方法不可以被final 修饰。抽象类也不可以被final修饰。

        抽象类的设计原则:

  1. 抽象类是用来继承的,只要有可能,不要从具体类继承。
  2. 假设有2个具体类,类A和类B,类B是类A的子类,那么一个最简单的修改方案是应当建立一个抽象类C(或者接口),然后让类A和类B分别去继承抽象类C.

抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。

接口:

接口:就是规定了一系列的规则、标准、动作等,不做具体的实现。

一个类中如果不存在数据,只存在抽象方法时,就可以声明为接口,接口使用interface来声明。

例如:

package com.bxit1;

/**

 * 定义一个接口

 * @author QJ

 *

 */

public interface Fly{

//String name="";

//飞行的方法

/*public abstract*/ void fly();

}

注意:1.在接口中的所有方法都默认是public abstract修饰的

      2.在接口中只能有抽象的方法,不能有具体的方法。

      3.在接口中定义的属性默认为public final修饰。(一般情况接口中是不建议定义属性的)

   4.在接口中的属性和方法都不能使用private修饰

   5.接口与类是并列的概念,类可以被继承,接口只能被类实现。

实现接口使用关键字implements,一个类同时可以实现多个接口中的方法,实现多个接口时,接口之间用逗号分隔。

定义接口的语法

[修饰符] class 类名 implements 接口名1,接口名2,...{

    //类结构

   }

例如:

package com.bxit1;

public class Bird implements Fly{

@Override

public void fly() {

System.out.println("鸟在飞!");

}

}

接口和抽象类的区别:

  1.抽象类定义的时候使用abstract  class,接口使用interface定义。

  2.抽象类中可以有自己私有的属性,但是接口中不能有私有的属性,接口中的属性默认都是public final修饰

  3.抽象类中可以有具体的方法,还可以没有抽象方法,但是接口中不能有具体的方法,必须都是抽象的方法。

  4.抽象类只能单继承,但是接口可以多继承。

  5.抽象类可以实现接口,但是接口不能够实现接口。

  6.在一般情况下,在使用继承的时候,优先考虑接口,再考虑抽象类。

  7.接口主要针对的是行为特性。抽象类侧重点还是类。

  注意:抽象类可以实现接口,但是在抽象类中可以不对接口中的方法进行具体实现,

   如果不在抽象类中实现,则将方法的实现交给子类。

抽象类和接口的好处:

    1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。

2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。

3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。

         可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。

         如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值