黑马程序员技术交流社区

标题: 抽象类,和接口,比较难理解的 [打印本页]

作者: 七丶哥    时间: 2014-9-2 23:22
标题: 抽象类,和接口,比较难理解的
抽象
修饰符,abstract:只能修饰类和方法:
特点:
1,修饰的类不能创建对象(实例)。
2,修饰的对象只有功能,没有内容。
3,抽象方法和抽象类都必须被abstract关键字修饰,也就是抽象方法一定在抽象类中,
   但抽象类不一定要有抽象方法.
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
        如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。因为抽象方法和抽象类都必须被abstract关键字修饰(如果只复写了一个,那么子类必然还继承了其它的抽象方法,根据抽象方法必须在抽象类中,则这个类还是个抽象类)。
应用:
1,建立不可创建对象的类。
2,如果子类中需要的方法内容不一样,但又同样都要这么方法,那么就可以创建一个抽象类。
例如:创建一个学校成员,有学生,有老师,都有姓名,年龄,都要上课,但老师上课是教学,学生上课是学习。所以可以这样写:
  1. class XueXiao
  2. {
  3.         private String name;
  4.         private int age;
  5.         XueXiao(String name,int age)
  6.         {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }       
  10.         public abstract void work();//子类需要这个功能,但内容不一样,所以用抽象。
  11. }

  12. class Student extends Employee
  13. {
  14. Student(String name,int age)
  15. {
  16.         super(name,age);//直接调用父类构造函数。
  17. }
  18.         public void work()
  19.         {
  20.                 System.out.println("shangke");
  21.         }
  22. }

  23. class LaoShi extends Employee
  24. {
  25.         LaoShi(String name,int age)
  26.         {
  27.                 super(name,age);//直接调用父类构造函数。
  28.         }
  29.         public void work()
  30.         {
  31.                 System.out.println("laoshi");
  32.         }
  33. }
复制代码

接口:
接口:初期理解,可以认为是一个特殊的抽象类
        当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
class用于定义类
关健字:interface 用于定义接口。
接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符,(不写也会自动生成)。
        常量:public static final
        方法:public abstract
记住:接口中的成员都是public的。
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
否则子类是一个抽象类。原因和抽象类一样,有抽象则为抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。
1,类可以实现多个接口,用关健字:implements 如:
class Test implements JieKou,JieKou2
2,类继承后,仍可以实现多个接口,如:
class Test extends Demo implements JieKou,JieKou2
3,接口在可以实现多继承,如:
interface Test extends A,B
例:
abstract class Student
{
        abstract void study();学生都要学习,所以可以作为父类来给子类继承。
}
interface Smoking
{
        void smoke();//抽烟不是所有学生都会,所以,不可以继承,不然所有学生都抽烟了,所以定义为接口,让需要的类实现就行。
}
class ZhangSan extends Student implements Smoking
//继承后再实现,这样就实现了功能的扩展。
{
        void study(){}
        public void smoke(){}//记得要复写,因为父类是抽象的。
}
class Lisi extends Student
{
void study()
{
System.out.prtintln("study")
}
}


作者: 小糊涂神    时间: 2014-9-3 06:59
学习学习。
作者: 范鹏霄    时间: 2014-9-3 08:14
学习了,不错
作者: ItJack    时间: 2014-9-3 18:36
学习了,讲得很好。
作者: 忆梦追风    时间: 2014-9-3 20:12
很好,楼主继续努力




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2