美文网首页
Java-面向对象

Java-面向对象

作者: twilight_mao | 来源:发表于2018-08-21 22:31 被阅读0次

1 类和对象

类是一个模板,它描述一类对象的行为和状态。
对象是类的一个实例。
面向对象三大特性:封装、继承、多态

1.1 封装

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
实现Java封装步骤:

  • 修改属性的可见性来限制对属性的访问(一般为private)
  • 对每个属性提供对外的公共方法访问
public class EncapTest{
 
   private String name;
   private int age;
 
   public int getAge(){
      return age;
   }
 
   public String getName(){
      return name;
   }
 
   public void setAge( int newAge){
      age = newAge;
   }
 
   public void setName(String newName){
      name = newName;
   }
 
}

1.2 继承

继承就是子类继承了父类的行为和特征,使子类对象具有父类的方法。

  • 为什么需要继承:可将重复性代码提取出来组成一个父类,降低代码量,提高维护性
  • 继承的特性
    1.子类拥有父类的非private的属性和方法
    2.子类可以拥有自己的属性和方法
    3.子类可用自己的方式实现父类的方法
    4.java支持单继承,多重继承
    5.提高类了之间的耦合性
  • 继承关键字
    1.extends
    2.implements:可通过实现多个接口来达到多重继承
    3.super:调用父类的方法
    4.this:调用自己的方法
  • 构造方法:子类不能继承父类的构造方法,如果父类的构造方法含有参数,则必须在子类的构造方法中显式地通过super调用父类的构造方法并配以适当的参数列表;如果父类总的构造方法无参数,子类的构造方法不需要调用父类的构造方法,系统会自动调用父类的无参构造方法。

1.3 多态

对象多种表现形式的体现,同一个事发生在不同对象上会产生不同效果。多态存在的三个必要条件:继承、重写、父类引用指向子类对象。

  • 多态的实现方式
    1.重写
    2.接口
    3.抽象类和抽象方法
  • 重写
    重写是子类对父类允许访问的方法的方法体进行重新编写,返回值和形参不能改变。
  • 方法的重写规则
    1.参数列表必须与被重写方法的相同
    2.返回类型必须与被重写方法的返回类型相同
    3.父类的成员方法只能被它的子类重写
    4.声明为final的方法只能被它的子类重写
    5.声明为static的方法不能被重写,能被载次声明
    6.构造方法不能被重写
    7.如果不能继承一个方法,则不能重写这个方法
  • 重载
    重载在一个类里,方法名相同,参数不同,返回类型可相同也可不同。
  • 重载规则
    1.被重载的方法必须改变参数列表(参数个数或者类型不一样)
    2.被重载的方法可以改变返回类型
    3.被重载的方法可以改变访问修饰符
    4.被重载的方法可以声明新的或更广的检查异常
    5.方法能在同一个类或子类中被重载
  • 重写与重载间的区别
区别点 重写 重载
参数列表 一定不能修改 必须修改
返回类型 一定不能修改 可以修改
异常 可减少或删除,不能抛出新的或更广的异常 可以修改
访问 不能更严格的限制,可以降低限制 可以修改

1.4抽象类

用abstract来声明

  • 抽象类不能被实例化,只有抽象类的非抽象子类可以创建对象
  • 抽象类中不一定包含抽象方法,含有抽象方法的类一定是抽象类
  • 抽象类中的抽象方法只是声明,不含方法体
  • 构造方法、类方法不能声明为抽象方法
  • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类

1.5 接口

用interface来声明

  • 接口特性
    1.接口中的每个方法是隐式抽象的,接口中的方法会被隐式指定为public abstract,并且只能是public abstract修饰。
    2.接口中可以含有变量,但接口中的变量会被隐式指定为public static final变量,并且只能只public。
    3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 接口与抽象类的区别
    1.抽象类中的方法可以有方法体,而接口中不行。
    2.抽象类中成员变量可以是各种类型,而接口中成员变量只能是publi static final类型。
    3.接口中不能含有静态代码块,抽象类中可以有。
    4.一个类只能继承一个抽象类,可以实现多个接口。

1.6 枚举与泛型

  • 枚举适用于一个类的对象是有限且固定的。
package enumcase;

public enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}
  • 泛型3种使用方式:泛型类、泛型方法、泛型接口
    泛型只在编译阶段有效,在编译时检测非法类型
List<User> list = user3Repository.findAll();
Optional<User> findByNickName(String nickName);
  • 泛型使用最佳实践
    1.在代码中避免泛型类和原始类型的混用。比如List<String>和List不应该共同使用。这样会产生一些编译器警告和潜在的运行时异常。
    2.在使用带通配符的泛型类的时候,需要明确通配符所代表的一组类型的概念。由于具体的类型是未知的,很多操作是不允许的。
    3.泛型类最好不要同数组一块使用。
    4.不要忽视编译器给出的警告信息。

1.7 集合类

image.png
  • List、Set、Map是集合体系中最主要的三个接口,其中List、Set继承自Collection接口。
  • Set不允许元素重复,HashSet、TreeSet是两个主要实现类。
  • List有序且允许元素重复,ArrayList、LinkedList、Vector是三个主要实现类。
  • Map也属于集合系统,但与Collection不同,Map是key对value的映射,其中key列就是一个集合,key不能重复,value可以重复,HashMap、TreeMap、Hashtable是三个主要实现类。

1.7.1 List

具体实现类常用的有ArrayList和LinkedList

  • ArrayList和LinkedList区别
    1.ArrayList基于动态数据的数据结构,LinkedList基于链表的数据结构
    2.随机访问get和set,ArrayList比LinkedList更快,因为LinkedList需要移动指针
    3.新增和删除操作add和remove,LinkedList更好,因为ArrayList需要移动数据

1.7.2 Map

  • HashMap和TreeMap区别
    1.HashMap通过hashcode对其内容快速查找,TreeMap所有元素都保持某种固定顺序
    2.在Map中插入、删除、定位元素,HashMap是最好的选择;如果需要按某种顺序遍历键用TreeMap更好

相关文章

  • java-面向对象

    1,什么是面向对象? 面向对象是一种编程方法,面向对象是一种思维方式-----------------将现实世界中...

  • Java-面向对象

    1 类和对象 类是一个模板,它描述一类对象的行为和状态。对象是类的一个实例。面向对象三大特性:封装、继承、多态 1...

  • Java-面向对象

    核心思想:找适合的对象做适合的事情。 自定义类 自定义类的三步骤:1、自定义类class 类名 {// 事物的公共...

  • Java-面向对象

    1.类与对象 对象是一种概念,一种用于解决问题的程序设计的思想方法。 在面向对象中把某一类事物所共有的属性和行为抽...

  • Java-面向对象-异常

    异常和错误 Java运行时期发生的问题就是异常。 Java中运行时发生的除了异常Exception还有错误Erro...

  • Java-面向对象-Object

    重写Object类中的常用方法equals和toString

  • Java-面向对象-多态

    多态 体现 好处 提高了程序的扩展性。 弊端 前提 子类的特有方法如何调用呢? 向下转型的注意事项 转型总结 多态...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • Java-面向对象-接口interface

    接口的由来 抽象类中可以定义抽象方法的 。当一个抽象类中的方法全是抽象的。这时,可以通过另一种特殊的形式来体现。 ...

  • java-面向对象之多态

    1.多态 1.多态理解同一个对象在不同时刻体现出来的不同状态。2.多态的前提a:有继承或者实现关系。b:有方法重写...

网友评论

      本文标题:Java-面向对象

      本文链接:https://www.haomeiwen.com/subject/ksrhiftx.html