一、Object类
③equals()方法
//“==”比较的是俩个对象的引用是否相等;equals()方法比较的是俩个对象的实际内容是否相等
class V { //自定义类V
}
public class Anything{
public static void main(String[] args) {
String s1="123"; // 实例化俩个对象,内容相同
String s2="123";
System.out.println(s1.equals(s2)); // 结果返回true
V v1=new V(); // 实例化俩个V类对象
V v2=new V();
System.out.println(v1.equals(v2)); // 结果返回false
}
}
注意:在本题中,因为equals()方法的默认实现是使用”==“运算符比较的俩个对象的引用地址,而不是比较的俩个对象的内容,所以要想真正的比较俩个对象的内容,要在自定义类中重写equals()方法
1.1 对象内容的转换
一、向上转型(由具体的类转换成抽象的类)
//使Parallelogram类继承Quadrangle类,然后在主方法中调用父类的draw()方法
class Qusdeangle{ // 四边形类
public static void draw(Qusdeangle q){
} // 四边形类类的方法
}
public class Parallelogram extends Qusdeangle{ // 平行四边形类,继承了四边形类
public static void main(String arg[]){
Parallelogram p=new Parallelogram(); //实例化平行四边类的对象引用
draw(p); //调用父类的方法
}
}
二、向下转型(由抽象的类转换成具体的类)
class Qusdeangle{ // 四边形类
public static void draw(Qusdeangle q){
} // 四边形类类的方法
}
public class Parallelogram extends Qusdeangle{ // 平行四边形类,继承了四边形类
public static void main(String arg[]){
draw(new Parallelogram()); // 将平行四边形的类看作位四边形的类,称为向上转型
Qusdeangle q=new Parallelogram();
// Parallelogram p=q;
// 将父类对象直接赋给主类,错误;
// 将父类对象赋予子类,且强制转换为子类型,正确
Parallelogram p=(Parallelogram)q;
}
}
1.4使用insantanceof操作符判断对象类型
class Qusdeangle{
public static void draw(Qusdeangle q){
}
}
class Square extends Qusdeangle{
}
class Anything {
}
public class Parallelogram extends Qusdeangle{ // 平行四边形类,继承了四边形类
public static void main(String arg[]){
Qusdeangle q=new Qusdeangle(); // 实例化父类对象
// 判断父类对象是否为Paralleogram子类的一个实例
if (q instanceof Parallelogram){
Parallelogram p=(Parallelogram) q; // 向下转型操作
}
if (q instanceof Square){
Square p=(Square) q;
}
//由于q对象不是Anything类的对象,故错误
// System.out.println(q instanceof Anything);
}
}
10.5 方法的重载
//构造方法由类的名称确定,古构造方法只有一个名称;以不同方式实例化对象构造多个方法
// 方法的重载就是在一个类中允许同时存在一个以上的同名方法
public class OverLoadText {
public static int add(int a,int b){
return a+b;
}
// 定义与第一个方法相同,而参数类型不同的方法
public static double add(double a,double b){
return a+b;
}
public static int add(int a){
return a;
}
// 定义一个成员方法
public static int add(int a,double b){
return 1;
}
public static int add(double a,int b){
return 1;
}
public static void main(String args[]){
System.out.println(add(1,2));
System.out.println(add(2.1,3.2));
System.out.println(add(1));
}
}
// 参数类型、参数个数、参数顺序不同将会构成重载
public static int add(int...a){ //定义不定长参数编译器将a看作一个数组
int s=0;
for (int i=0;i<a.length;i++){
s=s+s[i]
}
return s;
}
1.6 多态
编写draw()方法,该方法接收Quadrangle类的对象作为参数,即使用这俩个内部类的父类作为方法参数
class Qusdeangle{
//实例化保存四边形对象的数组对象
private Qusdeangle[] qtest=new Qusdeangle[6];
private int nextIndex=0;
public void draw(Qusdeangle q){ // 定义draw()方法,参数为四边形对象
if(nextIndex<qtest.length){
qtest[nextIndex]=q;
System.out.println(nextIndex);
nextIndex++;
}
}
public static void main(String[] args[]){
//实例化俩个四边形对象,调用draw()方法
Qusdeangle q=new Qusdeangle();
q.draw(new Square()); //以正方形对象作为参数调用draw()方法
q.draw(new Parallelogram()); //以平行四边形对象作为参数调用draw()方法
}
}
//定义一个正方形类,继承四边形类
class Square extends Qusdeangle{
public Square(){
System.out.println("正方形");
}
}
// 平行四边形类,继承了四边形类
public class Parallelogram extends Qusdeangle{
public Parallelogram(){
System.out.println("平行四边形");
}
}
10.7 接口
// 接口是抽象类的延申,可以将它看作是纯粹的抽象类,类中的所有方法都没有方法体
//接口使用interface关键字进行定义
public interface drawTest{
void draw(); // 接口内的方法,省略关键字 abstract
//public:接口可以像类一样被权限修饰符修饰,但是public关键字仅限用于接口在与其他同名的文件中被定义
//接口定义的任何字段都是static二号final的
interface drawTest{ //定义接口
public void draw(); //定义方法
}
//定义平行四边形类,该类继承了四边形类并实现了drawTest接口
class ParalleogramUseInterface extends QuadrangleUseInterface
implements drawTest{
public void draw(){ //由于该类实现了接口,所以要覆盖draw()方法
System.out.println("平行四边形.draw()");
}
void doAnyThing(){ //覆盖父类方法
}
}
class SquareUseInterface extends QuadrangleUseInterface implements
drawTest{
public void draw(){
System.out.println("正方形.draw()");
}
void doAnyThing(){
}
}
class AnyThingUseInterface extends QuadrangleUseInterface{
void doAnhThing(){
}
}
public class QuadrangleUseInterface { //定义四边形类
public void doAnyThing(){
}
public static void main(String args[]){
drawTest[] d={ //接口也可以进行向上转型操作
new SquareUseInterface(),new ParalleogramUseInterface()
};
for (int i=0;i<d.length;i++){
d[i].draw(); //调用draw()方法
}
}
}