JAVA面向对象(下)

Java面向对象(下)

一、继承

​ 在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事务之间形成一种关系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物。

​ 在Java中,类的继承是指在一个现有的类的基础上去构造一个新的类,构建出来的信类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

//定义一个父类
class Animal{
   
	String name;//定义name的属性,如果是私有的属性则不能被子类继承
	//定义动物叫的方法
	public void shout(){
   
		System.out.println("发出叫声");
	}
}
//定义一个狗类,使用关键字extends用于继承
class Dog extends Animal{
   
	//定义一个打印name属性的方法
	public void printName(){
   
		System.out.println("name="+name);
	} 
}

//主函数内
Dog dog = new Dog();	//创建一个Dog类的对象,子类的对象
dog.name = "沙皮狗";	  //为Dog类的name属性赋值
dog.printName();		//调用Dog类输出名字的方法
dog.shout();			//调用Dog类继承的父类的方法
>>>
name=沙皮狗
发出叫声

在类的继承中,需要注意一些问题,具体如下:

​ 1.在Java中,类只支持单继承,不允许多重继承,也就是说一个类智能有一个直接父亲,例如下面的方法是不合法的

class A{
   }
class B{
   }
class C extends A,B{
   } 

​ 2.多个类可以继承一个父亲。

class A{
   }
class B extends A{
   }
class C extends A{
   }

​ 3.在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类。

class A{
   }
class B extends A{
   }
class C extends B{
   }

​ 4.在Java中,一个类可以即是一个类的父类同时还可以是另外类的子类。例如上例的B。

二、重写

​ 在继承中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承方法进行一些修改,即对父类的方法进行重写。需要注意的是,在子类中重写方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型,并且保证子类方法的权限必须大于或者等于父类方法权限

​ 例如前面的动物叫声可以经过重写达到我们预期的目的:

//定义一个父类
class Animal{
   
	String name;//定义name的属性,如果是私有的属性则不能被子类继承
	//定义动物叫的方法
	public void shout(){
   
		System.out.println("发出叫声");
	}
}
//定义一个狗类,使用关键字extends用于继承
class Dog extends Animal{
   
	//定义一个打印name属性的方法
	public void printName(){
   
		System.out.println("name="+name);
	}
	public void shout(){
   
		System.out.println("汪汪汪");
	}
}

//主函数内
Dog dog = new Dog();	//创建一个Dog类的对象,子类的对象
dog.name = "沙皮狗";	  //为Dog类的name属性赋值
dog.printName();		//调用Dog类输出名字的方法
dog.shout();			//调用Dog类继承的父类的方法
>>>
name=沙皮狗
汪汪汪

三、super关键字

​ 当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,在Java中专门提供了一个super关键字用于访问父类的成员。例如访问父类的成员变量、成员方法和构造方法。

​ 1.使用super关键字访问父类的成员变量和成员方法,格式如下:

super.成员变量
super.成员方法{
   {
   参数1,参数2....}}

例:

//定义Animal作为父类
class Animal{
   
    String name = "动物";
    //定义动物叫的方法
    public void shout(){
   
        System.out.println("动物发出叫声");
    }
}

//定义Dog继承Animal
class Dog extends Animal{
   
    String name = "犬类";
    public void shout(){
   
        //访问父类的方法shout
        super.shout();
        System.out.println("汪汪汪");
    }
    //定义打印name属性的方法
    public void printName(){
   
        System.out.println("name="+super.name);//访问父类的成员变量name
    }
}

//主函数内
Dog dog = new Dog();//创建dog类对象
dog.shout();
dog.printName();
>>>
动物发出叫声
汪汪汪
name=动物

​ 2.使用super关键字访问父类的构造方法:

super{
   {
   参数1,参数2....}}

​ 在子类的构造方法必须要访问父类的构造方法,子类的构造方法第一行有一行super关键字,如果父类的构造方法是有参的,则子类会报错。前提:必须是子类的构造方法才能调用父类的构造方法;

//定义Animal类作为父类
class Animal{
   
	//定义Animal类的构造方法
	public
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值