接口抽象类和接口的区别

接口
1.类或抽象类:放一些共性的东西,大家都有的东西,即“你会我也会,你有我也有。”
接口:定义的是额外的扩展性的东西,不是每个人都会的。
2.接口的特点:
(1)定义接口使用的是interface关键字。
(2)类和接口之间是实现关系,用implements关键字。class implements interface
(3)接口不可以创建对象,可以使用多态的形式创建对象。它连构造方法都没有。
接口有没有其他的方式实例化呢?参照多态的形式使用类来实现实例化。
Jumping j = new Cat();
j.jump();
多态的几种形式:
A.具体类多态(几乎不用)
B.抽象类多态
C.接口多态(最常用)
(4)接口的实现类 一个类实现一个接口。
要么重写接口中的所有抽象方法,要么这个类就是抽象类。
3.接口的成员特点:
成员变量:有成员变量,而且只能是常量。有默认的public static final修饰符,即是静态常量。
构造方法:没有构造方法
成员方法:有成员方法,而且都是抽象的。有默认的public abstract修饰符,即是抽象方法。
4.关系区别
类与类:继承关系。只能单继承,可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口:继承关系,可以单继承,也可以多继承。
5.抽象类和接口的区别
(1)成员区别:
抽象类:成员变量:可以是变量,也可以是常量。构造方法:有。成员方法:可以是抽象方法,也可以是非抽象方法。
接口:成员变量:只能是常量。成员方法:只能是抽象方法。
(2)关系区别
类与类:继承关系。只能单继承,可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口:继承关系,可以单继承,也可以多继承。
(3)设计理念的区别
抽象类:被继承,体现的是is a。抽象类中定义的是继承体系的共性功能。
接口:被实现,体现的是like a。抽象中定义的是该体系的扩展功能。

四种权限修饰符
1.本类 2.同一个包下(子类和无关类) 3.不同包下(子类和无关类)
3.1子类 3.2无关类
private 1.Y
默认(friendly) 1.Y 2.Y
protected 1.Y 2.Y 3.1Y
public 1.Y 2.y 3.1Y 3.2Y

equals方法
1.功能:比较两个对象是否相等。如果没有重写的话,比较的是两个对象的地址值。重写后,可以比较两个对象的属性值。
2.==:
(1)可以比较基本数据类型,比较基本数据类型的时候,比较的是基本数据类型的值是否相同。
(2)可以比较引用数据类型,比较引用数据类型的时候,比较的是引用数据类型的地址是否相同。
3.如果想比较引用对象的内容是否相同,重写public boolean equals(Object obj){…}
4.s1.equals(s2);//this=s1,哪个对象调用的equals,this就是谁。obj=s2,被调用时的参数是哪个对象,obj就是谁。
5.重写equals方法
业务流程:
(1)地址值
(2)对象是否为空null
(3)是否是同一个类的对象
(4)obj向下转型,开始比较各个属性值。
(5)比较基本数据类型
(6)比较引用数据类型:a.对象是否为null。b.值。
具体代码:
public boolean equals(Object obj){
//调用:cat.equals(cat2);
//this: cat
//obj: cat2
if(this == obj) return true;//比较cat和cat2的地址是否相同。如果相同,说明它们是同一个对象,肯定相同。
if(obj == null) return false;//看cat2是否为null。cat肯定不为null。如果cat为null,会报NullPointerException,根本走不到这个方法里。
if(getClass() != obj.getClass()) return false;//看两个对象cat和cat2是不是同一个类的对象。如果不是同一个类的对象,说明不是同一个物种,直接return false,没有比较的必要。
Cat other = (cat)obj;//把obj向下转型,为什么呢?因为下面要比较cat和cat2的属性值。如果不向下转型,还是obj的话,是不能获取cat2的属性值的。
if(age != other.age) return false;//由于age属性是基本数据类型,可以直接用关系运算符比较。
if(name == null){//看cat/this的name属性是否为null。这里为什么要判断name是否为null呢?如果name为null,两边比较name的属性值的时候,会报NullPointerException。
if(other.name != null) return false;//如果this.name为null,但是cat2.name不为null,说明它们不相同,直接返回false。
}else if(!name.equals(other.name)) return false;//比较this.name和cat2.name的值是否相同,如果不同,直接返回false。
return true;
}//the end

String类
1.String:代表字符串类。
字符串是由多个字符组成的一串数组。
字符串的本质就是一个字符数组。
2.构造方法
String(String original): 把字符串数据封装成字符串对象。String s=new String(“Hello”);
String(char[] value): 把字符数组的数据封装成字符串对象。char[] chs={‘H’,‘E’,‘L’,‘L’,‘O’};String s=new String(chs);
String(char[] value, int index, int count): 把字符数组的一部分数据封装成字符串对象。String s=new String(chs, 1, 2);
3.最常用的方式-直接赋值:String s=“hello”;
4.String类创建对象的特点
(1)通过构造方法创建对象。通过构造方法创建的字符串对象是在堆内存中。
(2)通过直接赋值的方式创建对象。通过直接赋值的方式创建的字符串对象,是在方法区的常量池中。(推荐用这个方式)
字符串的内容存储在方法区的常量池。这样做事为了方便字符串数据的复用。
String s1 = new String(“hello”);
String s2 = new String(“hello”);
String s3 = “hello”;
String s4 = “hello”;
System.out.println(s1 == s2);//false
System.out.println(s1 == s3);//false
System.out.println(s3 == s4);//true

代码
1.遍历字符串,即获取字符串中的每一个字符
String s = “16JKM13”;
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);//获取字符串s中的某个索引位置的字符串元素
if(ch >= ‘0’ && ch <= ‘9’){//判断字符是不是数字
System.out.println(ch);//比较的是ASCII码值
}
}
//ch >=‘A’ && ch <= ‘Z’ 大写字母
//ch >=‘a’ && ch <= ‘z’ 大写字母
//ch -= (‘a’ - ‘A’); 从小写字母变成大写字母 ‘a’-‘A’=32, ‘A’=65, ‘a’=97

2.字符串的拼接
int[] arr = {11,22,3,4,5};
String s = “[”;
for(int i = 0; i < arr.length; i++){
if(i == arr.length - 1){
s += arr[i];
}else{
s += arr[i] + ", ";
}
}
s += “]”;
System.out.println(s);
//字符串拼接s+=… 因为String concat方法重载overload了

3.字符串反转 abc–>cba
String s = “abc”;
String s_new = “”;//空串
for(int i = s.length - 1; i >= 0; i–){
char ch = s.charAt(i);
s_new += ch;
}
System.out.println(s_new);

StringBuilder
1.StringBuilder:是一个可变的字符串类,内容是可变的,非常适合做字符串拼接操作。
String:内容是固定的,字符串都是常量。
2.构造方法
public StringBuilder();//创建一个空的字符串
public StringBuilder(String str);//把str这个字符串转成了StringBuilder对象
3.一些功能
(1)添加功能:public StringBuilder append(任意类型);//添加数据,并返回对象本身
链式编程:sb.append(“hello”).append(“world”);//反着看,这是一个方法,方法由对象调用;正着看,对象调方法,返回的是一个对象。
(2)反转功能:public StringBuilder reverse();
(3)删除功能:public StringBuilder delete(int start, int end);//移除此序列的子字符串中的字符
4.StringBuilder和String的相互转换
StringBuilder–>String: public String toString();//通过toString()就可以把StringBuilder转换为String
String–>StringBuilder: public StringBuilder(String s);//通过构造方法就可以把String转换为StringBuilder
5.练习:字符串反转
思路:String–>StringBuilder–>reverse–>String
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuilder sb = new StringBuilder(s);
sb.reverse();
String s2 = sb.toString();

StringBuffer和StringBuilder:
StringBuilder:线程不安全,效率高。

字符串方法需要接收返回结果。
public char charAt(int index);//返回字符串中某个索引位置的字符元素
public boolean endWith(String small);//判断字符串是否已小字符结尾
public boolean equals(Object anObject);//判断两个字符串是否相等
public boolean equalsIgnoreCase(String anotherString);//判断两个字符串是否相等,忽略大小写
public int indexOf(int ch);//获取字符或小字符串在大字符串中的位置,不存在的话返回-1
public int length();//返回字符中元素的个数,字符串的长度
public String replace(CharSequence small, CharSequence replace);//把大字符串中的小字符串替换成replace,替换所有
例如:
String s = “11, 22, 33, 44”;
String replace = s.replace(",", “-”);
System.out.println(replace);//11-22-33-44
public String replaceFirst(String small, String replace);//把大字符串中的小字符串替换成replace,只替换第一次出现的
例如:
String s = “11,22,33,44”;
String replace = s.replaceFirst(",", “-”);
System.out.println(replace);//11-22,33,44
public String[] split(String small);//用小字符串切割大字符串
例如:
String s = “11,22,33,44”;
String[] split = s.split(",");
for(int i = 0; i < split.length; i++){
System.out.println(split[i]);
}
public boolean startsWith(String prefix);//判断大字符串是否以小字符串开头
public String subString(int beginIndex);//截取字符串,从索引beginIndex开始,截取到最后
例如:
String s = “abcdefg”;
String subString = s.subString(3);
System.out.println(subString);//defg
public String subString(int beginIndex, int endIndex);//截取字符串,从beginIndex开始,到endIndex结束,包含beginIndex,不包含endIndex
例如:
String s = “abcedfg”;
String subString = s.subString(1, 4);
System.out.println(subString);//bcd
public char[] toCharArray();//把字符串编程字符数组
例如:
String s = “abcdefg”;
char[] chs = s.toCharArray();
for(int i = 0; i < chs.length; i++){
System.out.println(chs[i]);
}
public String toLowerCase();//把字符串中的大写字母变成小写字母
例如:
String s = “dfkdjALSJDLJF”;
s = s.toLowerCase();
System.out.println(s);
public String toUpperCase();//把字符串中的小写字母变成大写字母
例如:
String s = “dfkdjALSJDLJF”;
s = s.toUpperCase();
System.out.println(s);
public static String valueOf(boolean b);//把各种类型的数据转成字符串
例如:
String valueOf = String.valueOf(234);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值