abstract、final 、interface 关键字

一、abstract关键字

abstract 只能修饰类和方法
语法格式
abstract class 类名 {
	普通方法:
	public void 方法名() {
		方法体;
	}
	抽象方法:
	public abstract void 方法名();
}
注意事项:
    1、如果一个类的被abstract修饰,这就叫抽象类
    2、抽象类中可以有普通的成员方法和抽象方法
    3、抽象类中没有方法体,是不完整的方法
    4、抽象类不可以实例化
    5、写一个类去继承抽象类
    6、在子类中重写抽象类中所有的抽象方法
    7、非抽象类可以重写,也可以不重写
    8、一个抽象可以继承另外一个抽象类
    9、抽象类可以继承非抽象类
案例:
abstract class Person {
	//在抽象类中可以写普通成员方法
	public void eat () {
		System.out.println("吃大盘鸡");
	}
	//定义一个抽象方法  是不完整的方法  没有方法体的
	abstract public  void work();
	
}
class Man extends Person {
    //重写
	@Override
	public void work() {
		System.out.println("吃大盘鸡拌面");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		Man man = new Man();
		man.eat();
	}
}

二、final关键字

用法:
1final可以修饰成员变量:使用final修饰成员变量,一定要初始化,不能修该;
2final可以修饰局部变量:使用final修饰局部变量,可以先不赋值,使用之前的赋值,但是一旦赋值不可以修改。
3final可以修饰成员方法:final修饰成员方法不可以被重写
4final可以修饰一个类:final修饰的类不可以被继承
5final可以修饰对象的引用:修饰对象引用一旦被赋值,就不可以改变。
案列:
class Person {
	final String name = "狗蛋";
	
	public void test () {
		 final int i;
		i = 30;
		//i = 80;//一旦被赋值,就无法改变了
		System.out.println(i);
	}
	 public final void eat () {
		System.out.println("吃饭");
	}
}
class Man extends Person {
	@Override
	public void eat() {
		System.out.println("吃的多");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		final Person person = new Person();
		System.out.println("Person:" + person);
		//一旦使用final修饰person 对象引用 是一个固定的内存地址
		Person person1 = new Person();
		System.out.println("Person1:"+ person1);
		//person.name = "嘻嘻";
		//person = person1;//将person1赋值给了person对象
		System.out.println(person);
	}

}

三、interface 接口

语法格式:
	interface 接口的名字{
		成员变量;
		成员方法;
	}
实现接口使用关键字implements
注意事项:
	1、使用关键字interface声明一个接口
	2、接口下面可以有属性,但是是staticfinal修饰的属性。
	3、接口下面的全部都是抽象方法,不带方法体;
	4、jdk1.8以后是可以有默认(default)的方法的,这个默认方法带有方法体
	5、接口下面没有构造方法,不能被实例化
	6、去使用一个普通的类去实现这个接口,使用关键字implements
	7、一定在实现类中去实现所有的抽象方法
	8、一个普通的类可以实现多个接口,弥补了单继承的局限性
	9、一个接口可以去继承另外一个接口
案例:
interface Person {
	//接口下面的属性都是常量   常量是使用static 和final修饰的
	//只不过在接口中把 static和fianls省去了 常量的名字都要大写
	String NAME = "狗蛋";
	//在接口一般不写属性的!!!
	//成员方法  在接口中全部是抽象的方法
	public void eat ();	
}
class Child implements Person {
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("吃大盘鸡");
	}	
}
public class Demo1 {
	public static void main(String[] args) {
        Child child = new Child();
		child.eat();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值