面向对象(二)

抽象方法和抽象类

抽象方法:使用abstract修饰的方法,没有方法体,只有声明,定义的是一种"规范",就是告诉子类必须要给抽象方法提供具体的实现
抽象类:包含抽象方法的类就是抽象类,通过abstract方法定义规范,然后要求子类必须定义具体实现.通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用

抽象类使用要点:

  1. 抽象类中可以有(但是不一定有)抽象方法,但是抽象方法必须在抽象类中(有抽象方法的类只能定义为抽象类)

  2. 抽象类不能实例化,即不能用new来实例化抽象类

  3. 抽象类中可以有普通属性,静态属性,普通方法,静态方法,构造方法.但是构造方法不能用了new来实例,只能用来被子类调用

  4. 抽象类只能用来被继承(抽象类天生使用来被继承的)

  5. 抽象方法必须被子类实现

  6. 抽象类是用abstract修饰的类,它的特点如下:

  7. 抽象方法没有任何的实现,直接以;结束的方法,本身没有调用的意义,但是它天生使用来被重写的

    注意:

    • final和abstract不能同时使用!!!

    • private和abstract不能同时使用!!!

    • 如果一个类继承了抽象父类,那么这个子类必须强制重写父类中所有的抽象方法,除非子类也是抽象类

接口

接口就是比"抽象类"还抽象的"抽象类".可以更加规范的对子类进行约束,全面地专业的实现了:规范和具体实现的分离
抽象类还提供某些具体实现,接口不提供任何实现.接口中所有的方法都是抽象方法
接口就是规范,定义了一组规则(对对象的抽象)
声明格式:

[访问修饰符] interface 接口名 [extends 父接口1,父接口2...]{
常量定义;(静态常量)
方法定义;(抽象方法)
}

接口定义的详细说明:

  1. 访问修饰符:只能是public或默认
  2. 接口名:和类名采用相同命名机制(毕竟是个特殊类,也会编译产生.class文件)
  3. extends:接口可以多继承(public interface c extends a,b{.},其中ab为接口)
  4. 常量:接口中的属性只能是常量.并且总是:public static final修饰,不写也是
  5. 方法:接口中的方法只能是:public abstract.省略的话,也是public abstract

注意:

  1. 子类通过implements来实现接口中的规范
  2. 接口不能创建实例,但是可用于声明引用变量类型
  3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的
  4. jdk7之前,接口中只能包含静态常量,抽象方法.不能有普通属性,构造方法,普通方法
  5. jdk8以后,接口中包含普通的静态方法
  6. 接口完全支持多继承.和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切

内部类

在这里插入图片描述

非静态内部类
非静态内部类对象依附于外部类对象,因此创建内部类对象要先创建外部类对象.Outer为外部类名,Inner为内部类名:
Outer.Inner inner = new Outer().new Inner(); //这也是非静态内部类对象能访问外部类对象属性的原因.
但是外部类不能直接访问非静态内部类的成员
在内部类中访问外部类成员时:如Outer.this.age; Outer.this.表示外部类对象.

静态内部类

在这里插入图片描述

匿名内部类

在这里插入图片描述

局部内部类(用的极少)
在这里插入图片描述

String基础

  1. String类又称为不可变字符序列
  2. String位于java.lang包中,java程序默认导入java.lang包下所有类
  3. java字符串就是Unicode字符序列,例如字符串"java"就是四个Unicode字符组成
  4. java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String,
    每个用双引号括起来的字符串都是String类的一个实例

常量池

在这里插入图片描述

字符串常量池:

String str1 = "xu";
String str2 = "xu";
String str3 = new String("xu");
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false

创建字符串时,不用new来创建的"字符串常量"会加入到常量池,下一个同样的方法创建字符串时,将会自动引用之前创建好的字符串常量,因此str1 == str2
而str3是用new的方式创建,即新开辟一块内存空间
因此:字符串相等的判断

  1. equals方法用来检测两个字符串内容是否相等.相等返回true,反之false
  2. 要测试两个字符串除了大小写区别外是否相等,使用equalsIgnoreCase方法(忽略大小写)
  3. 判断字符串是否相等不要使用"=="

String类常用方法

  1. length() 注意是方法而不是属性,数组才是length属性
  2. charAt(int index) 提取下标为index的字符串中的字符
  3. equals()以及equalsIgnoreCase().比较字符串值是否相等
  4. indexOf(String str) 返回str在字符串中首次出现的下标,没有返回-1
  5. lastIndexOf(String str) 与indexOf()的区别在于从右往左查找
  6. replace("","") 将字符串中的第一个参数值替换为第二个参数值
  7. startsWith(String str)和endsWith(String str)分别检测字符串是否以str开头或者结尾
  8. substring(int beginIndex)字符串分割.传入index,返回str1中从下标为index开始到最后的字符串
  9. substring(int beginIndex, int endIndex) 同上,分割下标是两个参数之间的字符串.下标范围为 [beginIndex,endIndex)
  10. 和toUpperCase()和toLowerCase() 将字符串转换为大小写
  11. trim() 去除字符串左右两边的空白字符

数组拷贝和Arrays数组操作类

  1. System.arraycopy(Object src, int srcPos,Object dest, int destPos,int length)
    src为原数组,dest为新数组,srcPos为从src的哪个位置开始拷贝,destPos为dest数组要拷贝的位置,length为从src数组拷贝的长度
  2. Arrays.toString(数组名) 打印数组名显示的是地址.可以用此方法显示数组内容
  3. Arrays.sort(数组名) 用于将数组进行__原地排序__(小->大).也可以自己写个compareTo(),所在类要实现Comparable接口
  4. Arrays.binarySearch(数组名,要找的元素) 二分查找. 若找到返回对应的下标.找不到返回-1

用于将数组进行__原地排序__(小->大).也可以自己写个compareTo(),所在类要实现Comparable接口
4. Arrays.binarySearch(数组名,要找的元素) 二分查找. 若找到返回对应的下标.找不到返回-1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值