Java-面向对象

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 list = user3Repository.findAll();
Optional findByNickName(String nickName);
  • 泛型使用最佳实践
    1.在代码中避免泛型类和原始类型的混用。比如List和List不应该共同使用。这样会产生一些编译器警告和潜在的运行时异常。
    2.在使用带通配符的泛型类的时候,需要明确通配符所代表的一组类型的概念。由于具体的类型是未知的,很多操作是不允许的。
    3.泛型类最好不要同数组一块使用。
    4.不要忽视编译器给出的警告信息。

1.7 集合类

Java-面向对象_第1张图片
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-面向对象)