第七章总结

7.1类的继承

一个类继承另一的类需要使用关键词extends

class Child extends Parent{}

因为JAVA只支持单继承,即一个类只能有一个父类

子类继承父类子后可以调用父类创建好的属性和方法

所有类的构造方法每一行都有一个隐藏的“super();"作用是在执行该构造方法之前调用其反类的构造方法

b962b8b235ef4d5e8b994a94a7b568c2.png

 ffef6bd834f242b88098f171494ca0b9.png

 5805ab30eb294724840f39bfe6732215.png

 b2a92ec56f4c42acb8b1ee98aef45f5c.png

7.2 Object类 

 

Object类是比较特殊的类,它的所有类的父亲,是Java类层中的最高层类

在Object类中,主要包括clone(),finalize(),equals(),toString()等方法
下面详细讲述Object类中的几个重要方法。
1. getClass()方法
getClass()方法是Object 类定义的方法,它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。语法如下:
getClass().getname();
可以将getClass()方法与toString()方法联合使用。
2.toString()方法
toString()方法的功能是将一个对象返回为字符串形式,它会返回一个String 实例。在实际的应用中通常重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的toString()方法。

7.3对象类型的转换

向上转型:

向上转型可以理解为将子类类型的对象转换为父类类型的对象,其把子类类型的对象直接赋值给父类队形的对象,进而实现按照父类描述此类的效果

 

向下转型:

向下转型可以理解为将父类类型的对象转化为子类类型的对象,需进行强制类型转化,向下转型是不安全的

列:Dog a=(Dog) new Animal;

子类类型 子类类型 =(子类类型)父类对象;

7.4 使用instanceof关键字判断对象类型

向下转型之前判断父类对象是否为子类对象的实例,这个判断会使用instanceof关键词来完成,可以用它来判断一个实例对象是否属于一个

instanceof的语法格式如下:

myobject instanceof ExampleClass

myobject:某类的对象引用

ExampleClass:某个类

使用instanceof关键词的表达式返回值为布尔值,如果返回值为true,则说明myobject对象为ExampleClass的实例对象,如果返回值为flas说明myobject不是ExampleClass的实例对象

6e034ffa002749eeb258ebe7be8f9078.png

 对象名   instanceof   类名(判断该对象是否属于该类或其子类)

7.5方法的重载

方法的重载就是在同一个类中允许存在一个以上的同名方法

没有继承关系,不能比较

方法名相同,参数不同


public class OverLoadTest {
	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 a;
	}
	public static int add(double a,int b) {
		return b;
	}
	public static void main(String args[]) {
		System.out.println("调用add(int,int)方法"+add(1,2));
		System.out.println("调用add(double,double)方法"+add(2.1,3.3));
		System.out.println("调用add(int)方法"+add(1));
		System.out.println("调用add(int,double)方法"+add(5,8.0));
		System.out.println("调用add(double,int)方法"+add(5.0,8));
	}
}

05e1abfa628848d9a5c29b379bd7bcb9.png

 

不定长方法的语法:

返回值 方法名(参数数据类型...参数名称)


public class OverLoadTest2 {
	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 a;
	}
	public static int add(double a,int b) {
		return b;
	}
	
	public static int add(int...a) {      //定义不定长参数方法
		int s=0;
		for(int i=0;i<a.length;i++) {
			s+=a[i];
		}
		return s;
	}
	public static void main(String args[]) {
		System.out.println("调用add(int,int)方法"+add(1,2));
		System.out.println("调用add(double,double)方法"+add(2.1,3.3));
		System.out.println("调用add(int)方法"+add(1));
		System.out.println("调用add(int,double)方法"+add(5,8.0));
		System.out.println("调用add(double,int)方法"+add(5.0,8));
		
		
		//调用不定长参数方法
		System.out.println("调用不定长参数方法"+add(1,2,3,4,5,6,7,8,9));
		System.out.println("调用不定长参数方法"+add(1));
		
	}
}

1d6820ba96324fb4af7a6b9d8a90f24f.png

 

 7.6 final关键字

 

final变量:

final的关键词可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,通常,由final定义的变量为常量

final double pl=3.14;

 

final方法:

将方法定义为final类型,可以防止子类修改父类的定义与实现方式,同时定义为final的方法的执行效率要高于非final
在修饰权限中曾经提到过private 修饰符,如果一个父类的某个方法被设置为private,子类将无法访问该方法,自然无法覆盖该方法。也就是说,一个定义为private 的方法隐式被指定为final类型,因此无须将一个定义为private 的方法再定义为final 类型。

private final void test(){

...//省略一些程序代码

}

 

final 类:

定义final类不能被继承,如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设为final类

final 类名{}

7.7多态

利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理

class Shape{}   //图形类
class Square extends Shape{}    //正方形继承图形类
class Circular extends Shape{}    //圆形继承图形类

public class Demo6 {
	public static void draw(Shape s) {   //绘制方法
		if(s instanceof Square) {     //如果是正方形
			System.out.println("绘制正方形");
		
		}else if (s instanceof Circular) {    //如果的圆形
			System.out.println("绘制圆形");
		}else {    //如果是其他类型
			System.out.println("绘制父类图形");
		}
	}
	public static void main(String[]args) {
		draw(new Shape());
		draw(new Square());
		draw(new Circular());
	}
}

2b329671785046f4ab8b4419bac043cf.png

 

7.8.1抽象类

抽象方选没有方法体,这个方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继系。实际上抽象类除了被继承没有任何意义。

 

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

 

只要类中有一个抽象方法,此类就被标记为抽象类。抽象类被继承后需要实现其中所有的抽象方法,也就是保证以相同的方法名称、参数列表和返回值类型创建出非抽象方法,当然也可以是抽象方法。下图说明了抽象类的继承关系。

 

接口所有方法都是抽象方法修饰符inter face 接口名{}实现implements java语言每个类可以实现多个接口 修饰符 class 类名 implements 接口1,接口2,接口3,.....{} 接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。对于7.8.1节中遗留的问题,可以将draw()方法封装到一个接口中,使需要draw()方法的类实现这个接口,同时也继承图形类,这就是接口存在的必要性。在图7.11中,描述了各个子类继承图形类后使用接口的关系。

 

7.8.2接口

 

接口使用 interface 关键字进行定义,其语法如下:

 

public interface Paintable{

    void draw(); //定义接口方法可省略public abstract关键字

}

 

public:接口可以像类一样被权限修饰符修饰,但public关键字仅限于接口在与其同名的文件中被定义。  interface:定义接口关键字。  Paintable:接口名称。   一个类继承一个父类的同时再实现一个接口,可以写成如下形式:

 

 

public class Parallelogram extends Quadrangle implements Paaintable{

  ...

 

 

}

 

 

例题7.13

 

interface Paintable{ //可绘制接口

 public void draw(); //绘制抽象方法

}

class Quadrangle{

 public void doAnything() {

  System.out.println("四边形提供的方法");

 }

}

//平行四边形类,继承四边形类,并实现了可绘制接口

class Parallelogram extends Quadrangle implements Paintable{

 public void draw() { //由于该类实现了接口,所以需要覆盖draw()方法

  System.out.println("绘制平行四边形");

 }

}

//正方形类,继承四边形类,并实现了可绘制接口

class Square extends Quadrangle implements Paintable{

 public void draw() {

  System.out.println("绘制正方形");

 }

}

//圆形类,仅实现了可绘制接口

class Circular implements Paintable{

 public void draw() {

  System.out.println("绘制圆形");

 }

}

public class Demo7 {       

 public static void main(String[]args) {

  Square s = new Square();

  s.draw();

  s.doAnything();

  Parallelogram p=new Parallelogram();

  p.draw();

  p.doAnything(); 

  Circular c=new Circular();

 

 

 

  c.draw();

  

 }

}

 

 

运行结果如下:

 

7f221cd56b1243c9acde5f46703e4b9d.jpg

 

 

实现多个接口的语法:

 

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

 

一个接口可以继承另一个接口,语法如下:

 

interface intf1{}
interface intf2 extends intf1{}   //接口继承接口

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值