java基础知识--继承--多态--String类

本文详细介绍了 Java 中 String 类的各种功能,包括获取、替换、判断、转换等操作,并探讨了抽象类与接口的概念及其区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类的获取功能:

int length():获取字符串的长度

char charAt(int index):获取指定索引处的字符

int indexOf(int ch):返回指定字符第一次在该字符串出现的索引

why 是 int? 因为97和‘a’---->a

int indexOf(String str):返回指定字符str字符串在大字符串中第一次出现的索引

int indexOf(int ch,int fromIndex):返回此字符从指定位置开始后第一次出现的索引

int indexOf(String str,int fromIndex:返回此字符串从指定位置开始后第一次出现的索引

String subString(int start):从指定位置开始截取到末尾(默认截取到末尾)

String subString(int start ,int end):从指定位置开始截取到指定位置 包前不包后

String类的替换功能:

String replace(char old,char new)

String replace(String old, String new)

去除字符串两端空格

String trim()

String常用类:

构造方法:六个

public String():空参构造方法

public String(byte[] bytes):将字节数组转换成字符串

public String(byte[] bytes,int index,int length):将部分字节数组转换成字符串

public String(char[] value):将字符数组转变成字符串

public String(cahr[] value,int offset,int count):将字符数组的一部分转换成字符串

public String(String original):将字符串常量转换为字符串

String类的判断功能:

boolean equals(Object obj):将此字符串和指定的对象进行比较

boolean equalsIgnoreCase(String str):将此字符串和另一个字符串进行比较,忽略大小写

boolean contains(String str):此字符串是否包含一个子字符串

boolean startWith(String str):判断这个字符串是否以字符串(str)开头

boolean endWith(String str):判断这个字符串是否以字符串(str)结尾

boolean isEmpty():判断该字符串是否为空

int compareTo(String str):按字典顺序比较两个字符串

int compareToIgnoreCase(String str) : 忽略大小写比较

 

String类的转换功能;

byte[] getBytes():将字符串转换成字节数组

char[] toCharArray():将字符串转换成字节数组

static String valueOf(char[] chs):将字符数组转换成字符串(直接使用string类名就可以直接调用)

static String valueOf(int i):将int类型数据转换成字符串

static String valueOf(任何数据类型):可以将任何数据类型转换成字符串

String toLowerCase():将字符串转换成小写

String toUpperCase():将字符串转换成大写

String contant(String str):字符串拼接

大字符串获取小字符串:

  1. 定义大小字符串,初始值是0
  2. 找小字符串在大字符串中第一次出现的索引

索引=-1 返回 count

索引 !=-1    count++

  1. 把刚才的索引+小字符串长度  作为开始截取大字符串

返回一个新的字符串赋给大串

  1. 循环从2开始

查找大字符串中小字符串出现大的次数:4

public static void main(String[] args) {

      String str1="zbmshiyigezbmhaozbmzbm";

      String str2="zbm";

      System.out.println(getCount(str1,str2));

  }

 

private static int getCount(String big, String small) {

    int count=0;

    int index=0;

    while((index = big.indexOf(small))!=-1) {

       count++;

       big=big.substring(index+small.length());

    }

    return count;

  }

}

抽象类:抽取共性,形成一个抽象类

抽象方法:方法功能声明相同,但方法功能主体不同

          抽取方法声明,不抽取方法主体。

           求周长的方法,不同图形算法不一样。

抽象类:不能实例化对象,不能new(只能new子类)

不能创建对象的原因:对象。抽象方法,抽象方法无方法主体,不能运行

使用方式:定义类,继承抽象类,将抽象方法重写,创建子类的对象

子类重写父类抽象方法:

建立子类,子类继承抽象类,重写抽象方法,创建子类对象

如果子类继承抽象类,重写了一部分抽象方法,这个子类还是一个抽象类。

抽象作用:继承体系,保证继承体系的完整性

抽象类:强制子类重写抽象方法

  1. 抽像类一定是个父类
  2. 抽象类中可以不定义抽象方法,为了不让该类创建对象,直接让子类调用
  3. private,final,static,不能与abstract同时出现,不能共存。

面试题:

抽象类中是否可以没有抽象方法?如何可以,该类还定义成抽象类有意义吗?why?

可以。可以没有抽象方法。有意义,不让其他人直接创建对象

这个类作为中间层的适配器出现。

 

java中有多继承吗?

类没有多继承,接口之间多继承

接口的好处:

  1. 接口的出现,扩展了功能
  2. 接口其实就是暴露出来的guize
  3. 接口出现降低了耦合度,即设备和设备之间实现了解耦

接口思想:

满足接口规则,解开耦合性,提高扩展性

接口和抽象类的区别:

相同点:

  1. 都位于继承的顶端,用于被其他类实现或继承
  2. 都不能直接实例化对象
  3. 都包含抽象方法,其子类都必须覆写这些抽象方法

不同点:

  1. 抽象类中既有抽象方法也有非抽象方法。接口中全部是抽象方法
  2. 一个类只能继承一个直接父类(可能是抽象类),却可以多实现
  3. 抽象类是这个事物中应具备的内容,继承体系是一种 “is  a” 的关系

接口是这个事物中的额外内容,继承体系是一种“ like  a”的关系

 

选用:优先选用接口,尽量少用抽象类

需要定义子类的行为,又要为子类提供共性功能时,才选用抽象类。

继承:子类会自动拥有父类所有可继承的属性和方法

  1. 子类中可以直接调用父类的成员
  2. 子类对象可以调用父类成员也可以调用子类成员

好处:提高代码复用性

继承的出现让类与类之间产生了关系,提供了多态的前提

弊端:高耦合

解决:用接口解除耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

注意:

  1. 类只支持单继承,不允许多继承(因为存在安全隐患),一个类只能有一个父类
  2. 一个类可以拥有多个子类
  3. 不能多继承,但是可以多层继承(多重继承)

抽取:每个具体事物的共性抽取,子类的共性抽取,形成父类

继承体系:父类--->内容最共性

          子类--->不但拥有共性,还有自己的特性

this。---->调用自己本类成员

super。----->调用自己的父类成员

子类的对象,调用成员变量:

子类自己有,就使用自己的

子类中无,就调用父类

在子类想调用父类的成员,使用super。父类成员

子类(派生类)继承父类(超类,基类)

 

多态(对象的多态)

最终多态的体现:父类引用变量可以指向子类对象。

多态前提:必须有子父类关系或类实现接口关系

继承/实现

方法重写

父类引用指向子类对象

公式:

父类类型或接口类型 变量名 = new 子类的对象();

多态的调用方法,方法必须运行子类的重写。

多态成员特点:

成员变量的特点:编译运行全看父类

编译的时候,参考父类中有没有这个变量,如果有,编译成功,没有编译失败

运行的时候,运行的是父类中的变量值。

成员方法的特点:编译看父类,运行看子类

编译的时候,参考父类中有没有这个方法,如果有编译成功,没有编译失败

运行的时候,运行的是子类的方法重写

多态转型:

向上转型:子类提升为了父类类型

Fu f = new Zi();

Person p = new Student();

父类的引用 变量名 = new 子类的对象();

好处:可以调用父类和子类的共有内容,运行子类的重写

弊端:不能调用子类的特有功能。

向下转型:父类类型强制转回子类类型

Student s = (Student)Person;

Zi z = new Fu;

好处:可以调用子类的特有功能。

类与类之间:继承关系,单继承,可以是多层继承 extends

类与接口直接:实现关系:可以单实现,也可以多实现  implements

接口与接口之间:继承关系,可以单继承,可以多继承

java中的类,可以继承一个父类的同时,实现多个接口。

创建对象就要明确属性值

给对象的属性初始化赋值--->构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值