嵌套类nested class 和 抽象类abstract

7 篇文章 0 订阅
4 篇文章 0 订阅

内部类与外部类

一个类的内部定义另一个类(嵌套类nested class)

  • 内部类inner class:没有使用static修饰的嵌套类
  • 外部类:包含嵌套类定义代码的类
  • 顶层类top-level- class:类定义不嵌套在其他类定义中的类

注意

  • 顶层类不能被其他类包含
  • 内部类是定义在另一个类体中的类,可以有属性和方法
  • 只有类A用到类B,其他类不会用到类B,也不允许其他类使用类B
  • 外部类不能直接访问内部类的成员,必须创建内部类的实例,然后使用对象名作前缀来访问内部类的成员
class Outer{		//外部类
	private String outStr;
	Outer(String s){
		outStr = s;
	}
	public void outMethod() {	//外部类中访问内部类成员的方法
		Inner in = new Inner();	//创建内部类实例
		System.out.println("outMethod访问:"+in.inStr);
		in.inMethod();
	}
	class Inner{
		public String inStr="内部类变量";
		public void inMethod() {
			System.out.println("inMethod访问:"+outStr);
		}
	}
}
public class welcome{
	public static void main(String[] args) {
		Outer o = new Outer("外部类变量");
		o.outMethod();
		
		Outer.Inner i = o.new Inner();
		System.out.println("其他类访问:"+i.inStr);
		System.out.print("其他类访问:");
		i.inMethod();
	}
}
输出
outMethod访问:内部类变量
inMethod访问:外部类变量
其他类访问:内部类变量
其他类访问:inMethod访问:外部类变量

抽象类

抽象类:类中没有包含足够的信息来描绘一个具体的对象

抽象方法声明
[权限修饰符] abstract 方法返回值类型 方法名(参数列表);
  • 抽象方法声明只需要给出方法头,不需要方法体,直接分号;结束
  • 构造方法不能声明为抽象方法
抽象类声明
[权限修饰符] abstract class 类名
{
	类体
}
  • 抽象类不能实例化
  • 在抽象类体中,可以包含抽象方法,也可以不包含。但是抽象方法的类必须声明为抽象类
  • 抽象类的子类只有给出每个抽象方法的方法体,即覆盖父类的抽象方法后,才能创建子类。如果有一个抽象方法未在子类中被覆盖,该子类也必须被声明为抽象类。
abstract class Person{
	private int id;
	private String name;
	abstract void processingScore();
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id=id;
	}
	public String name() {
		return name;
	}
	public void setName() {
		this.name=name;
	}
}
class Teacher extends Person{
	void processingScore() {
		System.out.println("input&print score");
	}
}
class Student extends Person{
	void processingScore() {
		System.out.println("check score");
	}
}
public class welcome{
	public static void main(String[] args) {
		Teacher t=new Teacher();
		Student s=new Student();
		t.processingScore();
		s.processingScore();
	}
}

如果在子类Student中没有覆盖抽象方法
把Student改成

class Student extends Person{
	
}

会报错:

Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The type Student must implement the inherited abstract method Person.processingScore()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值