Java面向对象——Final关键字、static关键字、抽象类、接口

目录

 

阐述

final的概念

static相关知识

抽象的概念

接口的概念

抽象类和接口的区别

包的概述和注意事项

四种权限修饰符的访问特点

课后题


阐述

final的概念

final是状态修饰符,意思是”最终的“。

被final修饰的类不能被继承

被final修饰的方法不能被重写

被final修饰的变量就是常量,只能赋值一次

拓展知识:

修饰符有三种

1.状态修饰符(final、static)

2.抽象修饰符(abstract)

3.权限修饰符(public、protected、private)

static相关知识

static修饰的成员随着类的加载而加载,可以直接被类调用。它们优先于对象存在。

this和super是随着对象的创建而存在,所以静态方法中是没有这两个关键字的。

任何没有static修饰的方法都是成员方法,随着对象的创建而存在。有static修饰的方法是“静态成员方法”,不是“成员方法”,它是随着类的加载而加载的。

抽象的概念

抽象类是用来继承共性功能的,不能实例化对象,其具体的功能留给子类实现。

抽象方法没有方法体,方法体就是参数列表后面的花括号代码块。

接口的概念

接口是用来实现拓展功能的,没有构造函数,不能实例化对象

它的成员变量只能是公共静态常量,默认 public static final修饰

它的成员方法只能是抽象的,默认public abstract修饰

抽象类和接口的区别

三点

1.成员区别:

抽象类的成员可以是常量,也可以是变量;接口的成员只能是常量。

抽象类有构造方法;接口没有构造方法。

抽象类的成员方法可以是抽象方法,也可以是非抽象方法;接口的成员方法只能是抽象方法。

2.关系区别

类与类是继承关系。只能单继承和多层继承,不可以多继承。

类与接口是实现关系。可以单实现,也可以多实现。多实现的接口名字用逗号隔开。

接口与接口是继承关系。可以单继承、多继承、多层继承。

3.设计理念区别

抽象类中定义的是继承体系的共性功能;接口中定义的是实现体系的拓展功能。

包的概述和注意事项

包是用于对类进行分类管理的文件夹。

注意事项:

package语句的定义格式为 package 包名; ,多级包名用.隔开。

package语句必须是程序的第一条可执行代码。

每个Java文件只能有一个package语句。

四种权限修饰符的访问特点

  public protected 默认 private
同一类中
同一包的不同类  
不同包的子类    
不同包的其他类      

public(公共权限)可以修饰 类、成员变量、方法,可以被任意调用、访问,是权限最高的修饰符。

protected(受保护权限)可以修饰 成员变量、方法,不能修饰外部类,只能被同一个类、同一个包的类、不同包的子类调用、访问。

default(默认权限,不写任何关键字)可以修饰 类、成员变量、方法,只能被同一个类、同一个包的其他类调用、访问。

private(私有权限)可以修饰成员变量、方法,不能修饰外部类,只能被同一个类调用、访问。

课后题

让所有的猫具备跳高的额外功能
1.    定义跳高接口Jumpping,该接口中有一个抽象跳高方法jump()。
2.    定义抽象类Animal,该类中有属性姓名name、年龄age,还有一个抽象吃饭eat()方法。
3.    定义猫类Cat,该类继承Animal,并实现跳高接口,重写抽象类中eat()方法与接口中的跳高jump()方法。
4.    定义测试类InterfaceTest,在测试类中,创建猫对象,给对象成员变量赋值,最后调用猫的吃饭和跳高方法。

//定义跳高接口Jumpping,该接口中有一个抽象跳高方法jump()。
public interface Jumpping {
	void jump();

}
//定义抽象类Animal,该类中有属性姓名name、年龄age,还有一个抽象吃饭eat()方法。
public abstract class Animal {
	private String name;
	private int age;
	
	public abstract void eat();

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}	
	
}
//定义猫类Cat,该类继承Animal,并实现跳高接口,重写抽象类中eat()方法与接口中的跳高jump()方法。
public class Cat extends Animal implements Jumpping {
	
	@Override
	public void eat() {
		System.out.println(super.getName() + "是个" + super.getAge() + "岁的小猫,它在吃鱼。");
	}
	
	@Override
	public void jump() {
		System.out.println("小猫" + super.getName() + "跳得真高!");		
	}

}
//定义测试类InterfaceTest,在测试类中,创建猫对象,给对象成员变量赋值,最后调用猫的吃饭和跳高方法。
public class InterfaceTest {
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.setName("咪咪");
		cat.setAge(1);
		
		cat.eat();
		cat.jump();
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40995238/article/details/112005617