内部类
内部类 :内部类是指在java的类中嵌套的类。
public class practice {
//内部类
class Main{
}
}
在上述中,practice为外部类,Main为内部类,要注意的是必须是定义在class 类名{ }里面的类才可以称为内部类,否则不能。
内部类可以分为以下几种 :
1.实例内部类 :是指没有用static修饰的类,也可以称为非静态内部类。
class Main{
public int a = 10;
public int b = 20;
static int c = 30;
class Main1{
int a = 15;
int d = 40;
public void print(){
System.out.println("Main::print");
}
}
}
public class practice {
public static void main(String[] args) {
Main mai = new Main();
Main.Main1 m = mai.new Main1();//调用内部类Main1
}
}
Main1为内部类,如果想要在其它类中调用,需要先调用Main1所在类的对象后再进行调用,需要注意不能在实例内部类中进行static修饰,因为static是在外部类引用前就先生成的,而内部类需要在所在外部类引用后才可进行调用的。
2.静态内部类 :static修饰的内部类。
class Main{
static class Main1{
static int a;
public void print(){
int a = 10;
System.out.println("Main::print");
}
}
}
public class practice {
public static void main(String[] args) {
//Main.Main1 a = new Main.Main1();//静态内部类实例,也可以不创建,直接用下一行的代码
Main.Main1.print();
}
}
静态的内部类可以直接访问外部类静态成员,实例则需要通过外部类实例访问,在外部类以外访问静态内部类可以通过外部类名加上内部类名进行访问。静态内部类中可以定义静态成员和实例成员。如果想要访问静态内部类中的实例成员,要先通过静态内部类实例才可以。
3.局部内部类 :在方法中的内部类。
public class practice {
public void fun(){
//局部内部类
class Main{
}
}
}
局部内部类一般很少应用,因为它定义在方法中,随着方法的调用而开始,方法停止结束,只能在方法中有效。局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。
Java的继承
继承 :继承就是在已经存在的类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。
为什么需要继承 :以动物类为例子
猫——》属性(名字,年龄),方法(吃,睡觉,介绍)
狗——》属性(名字,年龄),方法(吃,睡觉,介绍)
//狗类
class Dog{
private String name;//姓名
private int age;//年龄
public Dog(String n,int a){
name = n;
age = a;
}
public void eat() {
System.out.println(name+"正在吃饭");
}
public void sleep(){
System.out.println(name+"正在睡觉");
}
public void introduce(){
System.out.println("名字: "+name+"年龄: "+age);
}
}
//猫类
class Cat{
private String name;
private int age;
public Cat(String n,int a){
name = n;
age = a;
}
public void eat() {
System.out.println(name+"正在吃饭");
}
public void sleep(){
System.out.println(name+"正在睡觉");
}
public void introduce(){
System.out.println("名字: "+name+"年龄: "+age);
}
}
我们可以看到有很多重复的如 name, age还有一些方法重复了,代码维护性不高,而想要解决这个问题就要用到继承。
//父类
class Parent{
private String name;
private int age;
public Parent(String n,int a){
name = n;
age = a;
}
public void eat() {
System.out.println(name+"正在吃饭");
}
public void sleep(){
System.out.println(name+"正在睡觉");
}
public void introduce(){
System.out.println("名字: "+name+"年龄: "+age);
}
}
这是我们再看猫类和狗类
//狗类
class Dog extends Parent{
public Dog(String n,int a){
super(n,a);
}
}
猫类
class Cat extends Parent{
public Cat(String n,int a){
super(n,a);
}
}
我们通过子类继承父类,增加了代码的整洁性,便于维护。
继承中关键字的讲解
extends关键字 :
Java中,类的继承是单一继承,一个子类只能拥有一个父类,extends只能继承一个类
extends 关键字直接跟在子类名之后,后面是子类要继承的父类名称。例如:
public class Dog extends Person{}
super关键字 :
在子类的构造方法中显式的调用父类构造方法。访问父类的成员方法和变量。
class Cat extends Parent{
public Cat(String n,int a){
super(n,a);
}
}
super( ) 必须是在子类构造方法的方法体的第一行。()指定了父类构造方法中的所有参数。