Java学习笔记4——类、接口

本文详细介绍了Java中的继承、多态性以及抽象类和接口的概念。继承允许子类从父类继承属性和方法,多态性体现在方法的多种实现和对象的向上转型。抽象类不能直接实例化,而接口则定义了一组方法签名,实现接口的类必须实现这些方法。文章还探讨了抽象类与接口的区别以及它们在实际编程中的应用。
摘要由CSDN通过智能技术生成

1 继承

继承语法:class 子类 extends 父类
Java中了类不能进行多重继承
eg:子类对象的实例化

public class SubInstantProcess {
	public static void main(String [] args)
	{
		Student s = new Student();
	}
}
class Person
{
	String name;
	int age;
	public Person()
	{
		System.out.println("******父类构造方法:1、public Person()");
	}
	}
class Student extends Person
{
	String school;
	public Student()
	{
		System.out.println("*****子类构造方法:2、public Student()");
	}
	}

运行结果
在这里插入图片描述
结论:
子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。
在子类Student构造方法的首行相当于默认隐含了一个“super()”语句

class Student extends Person
{
	String school;
	public Student()
	{
		super();//隐含了这条语句
		System.out.println("*****子类构造方法:2、public Student()");
	}
	}

** 注意点**

  • super()——调用父类方法
  • super.name——父类中的属性
  • super.talk()——父类中的方法
  • 通过private限制子类访问父类中方法、属性
  • 重写:重写方法、属性

2 多态

方法的多态性:即是通过传递不同的参数来令同一方法接口实现不同的功能
对象多态性:向上转型和向下转型

  • 向上转型:父类对象通过子类对象去实例化,向上转型是不需要进行强制类型转换的;父类储存必须是子类类型
  • 向下转型:父类的对象可以转换为子类对象,必须要进行强制的类型转换
    继承与多态区别:
    父类对象依据被赋值的每个子类对象的类型;
    继承是子类使用父类的方法,而多态则是父类使用子类的方法。
    多态是父类使用被子类覆盖的同名方法,如果子类的方法是全新的,父类不存在同名的方法,则父类也不能使用子类自己独有的“个性化”方法。

static关键词可以避免多态的产生

接口

1 抽象类

**语法:**abstract class 类名称{}
规则:
⑴ 抽象类和抽象方法都必须用abstract关键字来修饰;
抽象类不能直接实例化,也就是不能直接用new关键字去产生对象;
⑶ 抽象类定义时抽象方法只需声明,而不需实现;
含有抽象方法的类必须被声明为抽象类,抽象类的子类必须 重写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。

注意点
⑴ 抽象类中可以有构造方法。
在抽象类中也可以拥有构造方法,但是这些构造方法必须在子类中被调用,并且子类实例化对象的时候依然满足类继承的关系,先默认调用父类的构造方法,而后再调用子类的构造方法,毕竟抽象类之中还是存在属性的
⑵ 抽象类不能够使用final定义。使用final定义的类不能有子类,而抽象类使用的时候必须有子类,这是一个矛盾的问题,所以抽象类上不能出现final定义。
在外部抽象类上无法使用static声明,但是内部抽象类却可以使用static定义,使用static定义的内部抽象类就表示一个外部类
⑷ 抽象类不能用关键字new实例化。
编程时可以将类中的公共方法放在抽象类中进行调用。

2 接口

语法: interface 接口名称{}
原则:
(1)接口必须有子类,子类依靠implements关键字可以同时实现多个接口;
(2)接口的子类(如果不是抽象类)则必须覆写接口之中的全部抽象方法;
(3)接口可以利用对象多态性,利用子类实现对象的实例化。
(4)接口与一般类一样,本身也具有数据成员与方法,但数据成员一定要赋初值,且此值不能再更改,方法也必须是“抽象方法”或default方法。也正因为方法除default方法外必须是抽象方法,而没有一般的方法,所以接口定义格式中,抽象方法声明的关键字abstract是可以省略的。
eg:子类继承多个接口的应用

public class InterfaceDemo {
	public static void main(String[] args)
	{
		X x = new X();//实例化子类对象
//		A a = x;
//		B b = x;
//		a.print();
//		b.get();
		x.print();
		x.get();
	}

}
interface A{
	public static final String INFO = "Hello World.";//全局变量
//	public abstract
	void print();
}
interface B
{
	void get();
	}
class X implements A,B //继承多个接口
{
	public void print()
	{
		System.out.println(INFO);
	}
	public void get()
	{
		System.out.println("你好");
	}
	}

运行结果:
在这里插入图片描述
将注释去掉运行还是一样的
一个类实现两个或多个接口,但多个接口中的方法不能同名;
接口是标准,所谓的标准,指的是各方共同遵守的一个守则。只要操作标准统一了,所有的参与者才可以按照统一的规则操作。
接口的作用——工厂设计模式(Factory)

抽象类和接口对比

抽象类和接口共同点:
⑴ 都是抽象类型;
⑵ 都可以有实现方法(以前接口不行);
⑶ 都可以不需要实现类或者继承者去实现所有方法。(以前不行,现在接口中默认方法不需要实现者实现)

抽象类和接口不同点:
⑴ 抽象类不可以多重继承,接口可以(无论是多重类型继承还是多重行为继承);
⑵ 抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,接口表示的是"like-a"关系;
⑶ 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值;抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值