第九课 面向对象编程 (九)

1.final

    1)final修饰变量:为常量 可以在定义的时候 或是 构造方法中进行初始化

                      给初始化值之后就不能改变

      静态常量public static final String TYPE; 以后编程会很常用

       可以在定义的时候 或是 初始化块中进行初始化

                      给初始化值之后就不能改变

   2)final修饰方法 :该方法不能在子类中被覆盖

   3)final修饰类:该类不能被继承

2.抽象类

    1)由abstract修饰的类 称为抽象类  由 abstract修饰的方法 称为抽象方法

    2)含有抽象方法的类 一定要声明为抽象类  一个类如果继承另一个抽象类  必须

       实现 父类未实现的抽象方法  否则也可以把 子类声明为抽象类  方法还为抽 
       象方法

    3)抽象类不能实例化对象

    4) 抽象方法只需要声明 不需要具体实现 public abstract void show();

    5)抽象类里可以没有抽象方法 但是是没有意义

3.接口:

   1) 从宏观上来讲 接口是一个规范

   2) 是抽象方法 和常量值 的定义的集合

   3) 关键字 interface

   4)一个类实现接口  使用 implements

   5)一个类如果要是实现了一个接口 那么就要实现接口里声明的方法

     否则 可以把方法声明为抽象方法 类声明为抽象类 (第一种做法常见)

   6)使用接口的指定者  实现者  使用用者相分离 (开发过程中的好处)

      架构师:制定接口
   
      普通程序员:使用者

      程序员:实现者

   7)一个接口可以被多个类实现

   8)一个类可以实现多个接口

   9)接口可以继承自接口

 

  举例:

接口:

public interface Sport {
 int count=10;
    void run();
    void jump();
}

 

实现类:

public class Athlete implements Sport{
 public void run(){
  System.out.println("短跑");
 }
 public void jump(){
  System.out.println("三级跳");
 }
}

 

4.工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。

             消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。

 

         接口:

public interface Office{
 public void start();
}

         实现类(一)

public class Access implements Office{ 
 public void start(){
  System.out.println("Access Start");
 } 
}

        实现类(二)

public class Excel implements Office{ 
 public void start(){
  System.out.println("Excel Start");
 } 
}

        实现类(三)

public class Visio implements Office{
 public void start(){
  System.out.println("Visio Start");
 }
}

       实现类(四)

public class Word implements Office{
 public void start(){
  System.out.println("Word Start");
 } 
}

         工厂模式实现

public class OfficeFactory {
   //工厂模式实现
 public static Office getOffice(String type) {
  Office office = null;
  if ("word".equals(type)) {
   office = new Word();
  } else if ("excel".equals(type)) {
   office = new Excel();
  } else if ("visio".equals(type)) {
   office = new Visio();
  } else if ("access".equals(type)) {
   office = new Access();
  } else {
   office = new Word();
  }
  return office;
 }
}

 

5.接口使用误区

   1)所有的java类都是继承Object的,所以多重继承就有问题,为了解决多继承的问题,引        

      入接口的  概念。这句话是否正确?

      不正确。接口内容的引入是解决了多继承的问题,但是它的引入的真正目的不是为了多      

     继承的概念,它是一种程序设计的模式,是接口与实现相分离的解决方案。


   2)由于java?interface中声明的字段在编译时会自动加上static?final的修饰符,即声明      

       为常量。因而interface通常是存放常量的最佳地点。 这句话是否正确

       不一定。为什么?
        (1)因为在java实际应用中会产生一些问题。起因有两点:一、我们所使用的常量并         

           不是 一成不变的,只是相对与变量不能赋值改变。二、部分编译。 
        (2)需要看具体的情景。如果工程需要运行的速度,直接在接口中设置常量即可。如           

          果工程需要部分修改,能够支持部分编译,则在类中进行定义更好。一般来说,            

           interface方式中一般不定义成员数据变量。

   3)abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至     

        可以相互替换,所以在选择上具有随意性。这句话是否正确?

       不正确。两者之间还是有很大的区别的。

       (1)从语法 和编程角度来说区别有:

            A.abstract 类里 可以有自己的数据成员 ,也可以有自己的方法 可以有抽象方
             法,也可以有不是abstract的方法 ,给出默认实现,interface一般不定义数             

               据成员 所有的方法都是抽象的方法

            B.abstract类 在java中是表示一种继承关系  一个类只能继承自一个类 而一个              

               类可以实现多个接口

        (2) 从问题域的角度来看
            abstract类 在java中是表示一种继承关系 ,要想使得关系合理 父类和派生类

            要存在“is a” 的关系,而接口则不然 接口并不要求 接口的定义 和接口的实           

           现 本质上相同  只是实现契约 而已

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值