Java中类的继承(extends)和接口实现(implements)

大家好,这是我的第一次写博客,主要是想记录自己的学习过程,话不多说,来聊一下Java中的类的继承与接口的实现个人理解。
Java是面向对象的程序设计语言,所以我们经常要用到类。在类中经常被提到的就是类的继承,即子类继承父类的所有公有属性和方法。

  • 子类对象可以直接调用父类的公有方法和属性
  • 子类可以增加新的属性和方法
  • 子类可以重写父类的方法(返回值类型和参数形式必须相同)
    样例如下:
package hello;
//这是父类-----manage
public class manage {
	private int id;
	private String name;
	public manage(){}
	//设置id的值
	public void set_id(int a)
	{
		id = a;
	}
	//返回id的值
	public int get_id()
	{
		return id;
	}
	//设置对象的name
	public void set_name(String str)
	{
		name = str;
	}
	//返回对象的name值
	public String get_name()
	{
		return name;
	}
	//打印各种属性
	public void print()
	{
		System.out.println("Its id is "+id);
		System.out.println("Its name is "+name);
	}
}

下面是子类的定义

package hello;
	
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.*;
public class Main extends manage{
	//新增height属性
	private double height;
	public static void main(String[] args) {
		// TODO Auto-generated method stub      
     	//System.out.println("Hello");
		Main m = new Main();
		//子类对象调用继承过来的方法print
		m.set_id(666);
		m.set_name("Alice");
		System.out.println("Main's id is "+m.get_id());
		System.out.println("Main's name is "+m.get_name());
		//子类对象调用重写的方法
		m.print();
	}
	//方法重写
	public void print()
	{
		System.out.println("Here is override");
		System.out.println("Its height is "+height);
	}
	//新增方法set_height
	public void set_height(double h)
	{
		height = h;
	}
}

上面我们可以看到列出的三种继承特性已经体现,接下来聊一下接口,接口中定义了许多的方法,但是不同的类在继承接口时有不同的需求,因此继承接口要重写方法。
接口(interface)和类(class)有相似的特点,也有不同的地方;
区别:

  • 接口支持多继承,即一个子类可继承多个接口
  • 接口没有构造函数,不可以创建对象
  • 接口中的方法没有被实现,因此子类继承接口时必须重写方法
  • 接口中访问属性直接通过名字调用
  • 接口的属性在声明必须赋初值,并且后期不可修改
  • 抽象类实现接口的时候可以不用实现方法体

见样例:
此处为父接口

package hello;

public abstract interface  manage {
	//对属性进行声明和初始化并且后期不可更改
	public static final int id=666;
	public static final String name="Alice";
	//声明抽象方法
	public abstract void set_id(int a);
	public void set_name(String str);
	//默认为public abstract ,不加前缀也OK
	void test();
	public void print();
}

此处为子接口及其实现

public class Main implements manage{
	private double height;
	public static void main(String[] args) {
		Main m = new Main();
		m.set_height(1.78);
		System.out.println("Main's id is "+m.get_id());
		System.out.println("Main's name is "+m.get_name());
		m.print();
	}
	
	public void print()
	{
		System.out.println("Here is override");
		System.out.println("Its height is "+height+"m");
	}
	
	public void set_height(double h){height = h;}
	public int get_id() {return id;}
	public String get_name() {return name;}
	//必须重写方法,哪怕只是一个空的方法体
	@Override
	public void test() {}
}

下面提到一个接口实现的常用途径,假设我们需要一个添加动作监听,需要用到addActionListener()函数,该函数的参数需要一个ActionListener的对象,但是ActionListener是一个接口,他不可以实例化对象,怎么办呢,我们可以

//声明test类 "继承" ActionListener接口
public class test implements ActionListener{
	public void actionPerformed(ActionEvent e){
		System.out.println("此处重写")
	}
}

//创建test类的对象n
test n = new test();
addActionListener(n)
可能刚开始大家难以理解,我在这里举个例子,假设我走进一间宠物店,我跟老板说:给我看一只猫科动物,然后老板给我拿来了一只豹子,我也接受,因为豹子也属于猫科动物嘛。同理,addActionListener函数的参数需要一个ActionListener类的对象,我给他送去了一个test的对象,因为test类是ActionListener的子类嘛,编译器也可以接受。
所以很多时候我们需要一个接口类为参数时,通常会新建一个子类并创建对象传参过去。
以上是我最近学习的浅薄看法,有不对的地方希望大家指出,谢谢
----------------2018–10-30–这是一个剥夺我江湖梦的日子------------------------

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值