Java基础部分三

第十章:接口、继承与多态

(一)类的继承
继承思想:
类的继承是基于父类的扩展,指定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加的原来父类所不具备的属性和方法,或者直接重写父类中的某些放法
例子:
在这里插入图片描述
分析:
1)在子类中可以连同初始化父类构造方法来完成子类初始化操作,既可以在子类的构造方法中使用super()语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法等。
2)子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public或protected的成员方法。
3)继承还可以重写父类的成员方法,就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的储存权限,或是修改成员方法的返回值类型。
注意: 当重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变

在实例化子类对象时,Java编译器会在子类的构造方法中自动调用父类的无参构造方法,例如:
在这里插入图片描述
运行结果:
在这里插入图片描述
说明:在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显式地调用父类的构造方法

(二)Object类

public class ObjectInstance{
         public String toString(){        //重写toString()方法
              return "在"+getClass().getName()+"类中重写toString()方法";
          }
         public static void main(String[] args){
              System.out.println(new ObjectInstance());      //打印本类对象
         }
    }

运算结果:
在ObjectInstance类中重写toString()方法

(三)对象类型的转换
1.向上转型:把子类对象赋值给父类类型的变量
在这里插入图片描述
运算结果:
在这里插入图片描述
分析:如果在四边形类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到在父类中定义一个方法完成各个子类的功能

2.向下转型:将父类对象赋予子类对象,并强制转换为子类型

class Quadrangle{
     public static void draw( Quadrangle q){
          //SomeSentence
      }
  }
public class Parallelogram extends  Quadrangle{
           public static void main(String[] args){
                draw(new  Parallelogram());
                Quadrangle q=new Parallelogram();   //向上转型
                Parallelogram p=(Parallelogram) q;    //向下转型 
        }
   } 

(四)使用instanceof操作符判断对象类型
instanceof的语法格式:myobject instanceof ExampleClass
注: myobject 是某类的对象引用;ExampleClass是某个类
例:

class Quadrangle{
         public static void draw( Quadrangle q){
              //SomeSentence
         }
   }
class Square extends  Quadrangle{
      //SomeSentence
 }
class Anything{
     //SomeSentence
}
public class Parallelogram extends Quadrangle{
         public static void main(String[] args){
             Quadrangle q=new Quadrangle();      //实例化父类对象
             //判断父类对象是否为parallelgram子类的一个实例
             if(q instanceof parallelogram){
                   Parallelgram p=(Parallelgram) q;  //向下转型
               }
             //判断父类对象是否为Square子类的一个实例
             if(q instanceof Square){
                 Square s=(Square) q;     //进行向下转型操作
               }
               //由于q对象不为Anything类的对象,所以下面这条语句是错误的
               //System.out.println(q instanceof Anything);
            }
       }

(五)方法的重载
说明:构造方法的名称由类名决定,所以构造方法只有一个名称,但如果希望以不同的方式来实例化对象,就需要使用多个构造方法来完成,为了让方法名相同而形参不同的构造方法同时存在,就必须用到“方法重载”
在这里插入图片描述
运算结果:
在这里插入图片描述

定义不定长参数方法确定重载关系:
语法:返回值 方法名(参数数据类型… 参数名称)
例:

public static int(int...a){         //定义不定长参数方法
         int s=0;
         for(int i=0;i<a.length;i++)
         s+=a[i];
         return s;
  }        

在这里插入图片描述

运算结果:
在这里插入图片描述
(六)多态
在这里插入图片描述
运行结果:
在这里插入图片描述
(七)抽象类与接口
1.抽象类:1)在解决实际问题中,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理 。 2)使用abstract关键字定义的类为抽象类,而使用这个关键字的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承。3)抽象类被继承后需要实现其中所有抽象方法,也就是保证相同的方法名称、参数列表、和相同返回值类型创建出非抽象方法,也可以是抽象方法

定义抽象类语法如下:

public abstract class Test{       //定义抽象类
        abstract void testAbstract();     //定义抽象方法
  }

2.接口:1)接口是抽象类的延伸,可以将接口看作是纯粹的抽象类,接口中所有方法都没有方法体。2)一个类可以使用接口实现多重继承,因为一个类可以同时实现多个接口,可以将所有需要继承的接口放置在implements关键字后面并用逗号隔开

定义接口语法如下:

public interface drawTest{    //定义接口
      void draw();     //定义接口类的方法,省略abstract关键字
  }   

实现多重继承语法如下:

class 类名 implements 接口1,接口2,接口3,....接口n

注意: 使用接口实现多重继承可能会造成在一个类中产生庞大的代码量,因为继承一个接口时需要实现接口中的所有方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值