抽象类,接口,内部类

抽象类

  • abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类

  • 抽象类中可以没有抽象方法,但是又抽象方法的类一定要声明为抽象类

  • 抽象类,不能用new关键字来创建对象,它是用来让子类继承的

  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的

  • 子类继承抽象类,那么久必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。

  
//abstract 抽象类
public abstract class Action {
   //约束~ 有人帮我们实现
   //abstract 抽象方法,只有方法名字,没有方法的实现!
   public abstract void doSomeThing();
   
   //1.不能new这个抽象类,只能靠子类去实现它:约束!
   //2.抽象类中可以写普通方法
   //3.抽象方法必须在抽象类中
   //抽象的抽象:约束~
   
   //思考题? 抽象类存在构造器么?
   //存在   存在的意义,例如游戏角色,将共同点抽象出来,提高开发效率
}
  
//抽象类的所有方法,继承了它的子类,都必须要实现它的方法~ 除非子类也是抽象类
public class A extends Action{
   @Override
   public void doSomeThing() {
?
  }
}

接口

  • 普通类:只有具体实现

  • 抽象类:具体实现和规范都有

  • 接口:只有规范.自己无法写方法~专业的约束! 约束和实现分离

 

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能...”的思想。如果你是天使,则必须能飞。如果你是汽车,则不虚能跑。如果你是好人,则必须干掉坏人。如果你是坏人,则必须欺负好人

  • 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守

  • OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++,java,C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

  • 声明类的关键字是class,声明接口的关键字是interface

  • 作用:

    • 约束

    • 定义一些方法,让不同的人实现

    • 方法都是public abstract

    • 属性都是public static final

    • 接口不能被实例化,接口中没有构造方法

    • implements可以实现多个接口

    • 继承接口的子类必须要重写接口中的方法

  
//interface 定义的关键字,接口都需要有实现类
public interface UserService {
?
   public static final int AGE = 99;
   //接口中的所有定义都是默认抽象的 自带修饰符public abstract
   void add(String name);
   void delete(String name);
   void update(String name);
   void query(String name);
}
  
//类 可以实现接口   implements 接口
//实现接口的类,就需要重写接口中的方法
//单继承利用接口实现伪多继承
public class UserServiceImpl implements UserService,TimeService{
   @Override
   public void add(String name) {
?
  }
?
   @Override
   public void delete(String name) {
?
  }
?
   @Override
   public void update(String name) {
?
  }
?
   @Override
   public void query(String name) {
?
  }
?
   @Override
   public void timer() {
?
  }
}

内部类

  • 内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就是内部类,而A类相对B类来说就是外部类了。

  • 1.成员内部类

  • 2.静态内部类

  • 3.局部内部类

  • 4.匿名内部类

  • lambada表达式

  
public class Outer {
?
   private int id;
   public void out(){
       System.out.println("这是外部类的方法");
  }
?
   public class Inner{
       public void in(){
           System.out.println("这是内部类的方法");
      }
       //获得外部类的私有属性,方法
       public void getID(){
           System.out.println(id);
      }
  }
   //局部内部类
   public void method() {
       class Inner {
           public void in() {
               System.out.println("这是内部类的方法");
          }
      }
  }
}
?
//一个java类中可以有多个class类,但是只能有一个public class
class A{
?
}
?
/*
public class Application {
   public static void main(String[] args) {
       Outer outer = new Outer();
       //通过这个外部类来实例化内部类
       Outer.Inner inner = outer.new Inner();
       inner.in();
   }
}
*/
  
public class Test {
   public static void main(String[] args) {
       //匿名内部类 没有名字初始化类,不用把实例保存到变量中
       new Apple().eat();
       new UserService(){
           @Override
           public void hello() {
?
          }
      };
  }
}
class Apple{
   public void eat(){
       System.out.println("1");
  }
}
?
interface UserService{
   void hello();
}

 

抽象类,接口,内部类

上一篇:hive 字符串函数


下一篇:win7_64位主机装虚机Linux系统(VMware Workstation10+CentOS6.5)详细步骤图文讲解