发布: 更新时间:2022-10-17 22:30:07
需要注意的是 Java 不支持多继承,但支持多重继承。
extends:类的继承是单一继承
implements:接口的继承,可继承多个接口
super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this:指向自己的引用。
final 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
调用父类的方法
方式一:重写
方式二:接口
方式三:抽象类和抽象方法
用abstract修饰符修饰
public abstract class Employee # 抽象类里可以有正常实现的普通方法
{
private String name;
private String address;
private int number;
public abstract double computePay(); # 抽象方法,在继承的子类中实现
//其余代码
}
修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {
private String name;
private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age; # 采用 this 关键字是为了解决实例变量(private String name)
} # 和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
public void setName(String name){
this.name = name;
}
}
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
[可见度] interface 接口名称 [extends 其他的接口名] { # 接口是隐式抽象的,默认abstract。
// 声明变量 # 隐式指定:public static final
// 抽象方法 # 方法也是隐式抽象的,默认public abstract
}
实例:
/* 文件名 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
# 用implements关键字来继承接口,如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
# 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
# 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
public void eat(){
System.out.println("Mammal eats");
}
public void travel(){
System.out.println("Mammal travels");
}
public int noOfLegs(){
return 0;
}
public static void main(String args[]){
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
接口之间的继承支持多继承,使用extends
public interface Hockey extends Sports, Event
标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。没有任何方法的接口被称为标记接口。
package java.util;
public interface EventListener
{}
标记接口主要用于以下两种目的:
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
public class Test
{
enum Color
{
RED, GREEN, BLUE; # 可以定义在类里面
}
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED; # 获取枚举类型的属性
# for (Color myVar : Color.values()) { 可以使用for语句迭代enum里面的属性
# System.out.println(myVar);}
System.out.println(c1);
}
}
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
enum Color
{
RED, GREEN, BLUE;
// 构造函数
private Color()
{
System.out.println("Constructor called for : " + this.toString());
}
public void colorInfo()
{
System.out.println("Universal Color");
}
}
public class Test
{
// 输出
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
c1.colorInfo();
}
}
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
例如,一个Something.java 文件它的内容
package net.java.util;
public class Something{
...
}
一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。
以下是一些 Java 中的包:
包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
import package1[.package2…].(classname|*);
类放在包中会有两种主要的结果:
原神3.8心海武器推荐 原神3.8心海带什么武器
阴阳师寻迹骰怎么获得 阴阳师寻迹骰获得方法
王者荣耀妄想都市观光怎么获得 王者荣耀妄想都市观光活动
阴阳师新召唤屋和幕间皮肤效果怎么样 阴阳师新召唤屋和幕间皮肤获取方法介绍
羊了个羊7.26攻略 羊了个羊7月26日怎么过
崩坏星穹铁道求不得成就攻略介绍 崩坏星穹铁道求不得成就怎么获得
崩坏星穹铁道去吧阿刃成就攻略介绍 崩坏星穹铁道去吧阿刃成就怎么获得
时空中的绘旅人罗夏生日有什么复刻 绘旅人罗夏生日礼包复刻一览
银河境界线武器强度怎么看 银河境界线武器强度排行攻略
阴阳师红蛋蛋限时福利怎么获得 阴阳师再结前缘版本福利介绍