深入面向对象(三)

面向对象三大特性

封装:encapsulation 隐藏信息
继承: inheritance 延续+扩展父类信息
多态: polymorphism 模糊策略 以不变应万变

(一)封装(encapsulation)

理解:“ 该露的露,该藏的藏”。
概念:“ 高内聚,低耦合”。用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
作用:
a)、实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要
的时候调用,从而实现了专业的分工,即工作中的分模块、分功能开发。
b)、隐藏信息,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,
如某客户的银行的密码需要保密,只能对该客户开发权限。

(二)多态 (polymorphism)

*概述:*主要是用来实现动态联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。

存在条件:要有继承,要有方法重写,父类引用指向子类对象

java中如何实现多态?使用多态的好处?
引用变量的两种类型:
• 编译时类型(模糊一点,一般是一个父类)
• 由声明时的类型决定。
• 运行时类型(运行时,具体是哪个子类就是哪个子类)
• 由实际对应的对象类型决定。

引用数据类型的类型转换

数据类型转换可以说是非常让JAVA程序猿头痛的事情了。有时候它在不经意之间就完成了(自动类
型转换),有时候却又要求程序员必须手动指定(强制类型转换)。基本数据类型,转换规则还可以通
过类型本身空间大小和精度分析明白,而且最多就是丢失精度但运行起来至少是不会报错。可是面对引
用数据类型,这个“坑”就大了:有自动转的,有强制转的,居然还有强制都转不了的;自动转了的却把
对象身上的方法丢了看不见;强制转的编译过了运行却可能报异常。

• 子类转换为父类:自动转换
上转型对象不能操作子类新增的成员变量和方法。
上转型对象可以操作子类继承或重写的成员变量和方法
如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。
• 父类转换为子类:强制转换
(绝不是做手术,而是父类的真面目就是一个子类,否则会出现类型转换错误
**

(三)javabean

规则:
1)、属性尽可能私有化 private
2)、访问器: setter 与 getter 访问器 >private ,一般 public 居多 setterXxx: 存储> 与 getterXxx:查看
代码:

public class Person { 
//姓名 private String name;
//年龄 private int age;
//性别 private boolean sex; 
public Person() {
 }
 //setter与getter 
 public String getName() { 
 return name; }public void setName(String name) { this.name = name; 
 }
 public int getAge() {
  return age;
   }
   public void setAge(int age) { 
   this.age = age; 
   }
   public boolean isSex() { 
   return sex; 
   }
   public void setSex(boolean sex) {
    this.sex = sex; 
    } 
    }

(四)经典MVC思想

概述:
MVC是一种分层思想,一种设计模式。
M:Model层(模型层 )
处理数据、业务,再把处理后的数据提供给视图层
V:View层(视图层)
为用户展示数据,是数据最直观的体现。
C:Controller层(业务逻辑层)
接收界面层的数据,对接受到的数据进行封装和类型转换。
调用模型层的服务进行业务逻辑的处理。
调用合适的视图去渲染数据。
优点:
减少代码量,提升性能(效率);
提高代码的扩展性(需求改动,无需改动太多的代码)
遵循高内聚、低耦合的原则
在这里插入图片描述

(五) 权限修饰符

public: 一览无遗;
protected:子承父业 (儿子自己使用);
default :家庭和睦;
private :占为已有
在这里插入图片描述

(六)抽象类

**概述:**使用了关键词 abstract 声明的类叫作”抽象类”。
要点:
1.抽象方法和抽象类均必须用abstract来修饰。
2.抽象方法没有方法体,只需要声明不需实现。
3.有抽象方法的类只能定义能抽象类 。
4.相反抽象类里面的方法不一定全是抽象方法,也可能没有抽象方法。
5.抽象类可以包含属性、方法、构造方法。
6.抽象类不能实例化,及不能用new来实例化抽象类,只能用来被子类调用。
7.抽象类只能用来继承。
8.抽象方法必须被子类实现。抽象类的子类必须覆盖所有的抽象方法才能被实例化,否则还是抽 象类。

代码:

//有抽象方法的类也必须被声明为abstract
 public class Test1 { 
 public static void main(String[] args) { 
 Teacher teacher=new Teacher("教师");
  teacher.work(); 
  Driver driver=new Driver("驾驶员"); 
  driver.work(); 
  } 
  }
  //一个抽象类 
  abstract class People{ 
  //抽象方法 
  public abstract void work(); 
  }
  class Teacher extends People{ 
  private String work;
public Teacher(String work) { 
this.work=work; 
}
@Override
 public void work() { 
 System.out.println("我的职业是"+this.work);
  } 
  }
  class Driver extends People{ 
  private String work; 
  public Driver(String work) {
   this.work=work;
    }
    @Override
     public void work() {
      System.out.println("我的职业是"+this.work);
       }

抽象类应用场景
在下列情况下,一个类将成为抽象类:

  1. 当一个类的一个或多个方法是抽象方法时。
  2. 当类是一个抽象类的子类,并且不能实现父类的所有抽象方法时。
  3. 当一个类实现一个接口,并且不能实现接口的所有抽象方法时。

(七)接口

**概述:**接口(interface ),比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专 业
地实现了:规范和具体实现的分离
定义:

格式:
• [访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {
• 常量定义 //总是public static final
• 方法定义 //总是:public abstract •
}

实现:
子类通过implements来实现接口中的规范
接口不能创建实例,但是可用于声明引用变量类型。
一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
Java的类只支持单继承,接口支持多继承
空接口:
只是给 JVM 的一种标识而已,就是 JVM 的通行证。
1)、java.lang.Cloneable :不是所有的对象都可以被克隆 否则CloneNotSupportedException
2)、java.io.Serializable
实际开发中,一个业务逻辑处理类永远不要去继承一个实现好的类,要么继承抽象类,要么实现接口,
优先使用接口,避免单继承的局限 :abstract class表示的是"is a"关系,interface表示的是"like a"关系

(八)面向对象三大特征总结

在编写代码时,我们追求”高内聚 低耦合” ,达到重用与规范,则需要使用面向对象的三大特性来实现:
封装:encapsulation 隐藏信息
继承:inheritance 延续+扩展父类信息
多态:polymorphism 模糊策略 以不变应万变

封装作用:
a) 实现专业的分工,工作中的分模块、分功能开发。
b) 隐藏信息和实现细节。使得对代码的修改更加安全和容易
继承作用:
实现代码的复用,延续+扩展父类信息
多态作用:
以不变应万变(如 USB 接口,只要你实现了我的标准,就能插上电脑)

发布了22 篇原创文章 · 获赞 6 · 访问量 456

猜你喜欢

转载自blog.csdn.net/ffgyfgj/article/details/105145270