今天看了类的一些内容包括继承,多态,还有接口
类的继承
格式:public class 子类名 extends 父类名 {}
当子类和父类有一个相同变量age时,从子类中访问父类的相同变量用super.age
super()//访问父类的构造方法
super.成员方法()//访问父类成员方法
子类所有构造方法默认都会访问父类中无参的构造方法
成员方法中可调用其他成员方法
一个包中有Teacher类,现在在另一个包内写测试类
若要创建Teacher对象,需给个导包:import 包名.类名;然后就可正常使用该类
同一个包下:不论是子类还是无关类除private不可访问外,其他都可访问
不同包下:子类可访问另一个包中父类的保护和公有,无关类只能访问公有
若父类中有个方法,则子类中不可存在同名方法 public final void show(){}
若final修饰变量,则该变量为常量 public final int age;
若final修饰类,则该类不存在子类 public final class show{}
static修饰特点:类的所有对象共有的成员和方法
可在主函数通过类名.变量名来赋值
静态成员方法只能访问静态成员
多态p171
多态的前提
1.有继承或实现关系
2.有方法重写
3.有父(类/接口)引用指向(子/实现)类对象
成员变量:编译看左边,执行看左边;
成员方法:编译看左边(即父类中有没有当前方法),执行看右边(输出子类的数据)
public class Zi extends Fu{}
Fu f = new Zi();//父类的引用指向子类对象(向上转型)
Zi z = (Fu)f;//(向下转型)强制转换
好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有功能
抽象类:含抽象方法的类
抽象方法:没有方法体
public abstract class 类名
{
public abstract void 方法名();
}
抽象类不能直接创建对象,可以再创建一个子类,再用多态(父类引用子类)创建对象调用
抽象类的子类必须重写所有父类的抽象方法(不用加abstract)或定义子类为抽象类(加abstract)
抽象类不一定有抽象方法,有抽象方法的一定是抽象类
抽象类中有构造函数但不能实例化
java接口:对行为进行抽象(抽象方法)
public interface 接口名{}
可以再接口中直接定义一个抽象方法
类不能继承接口,用implements(实现)public class 类名 implements 接口名{}
接口也不能实例化,但可通过多态实现对象实例化(接口多态)
1.接口中无变量,只有成员常量,默认修饰符 public static final
2.常量可以直接用 接口名.常量名 来调用数据,且默认定义为静态
3.无构造方法,因为接口主要是对行为进行抽象,没有具体存在
4.接口中不存准非抽象方法,默认修饰符 public abstract
5.一个类如果没有父类,默认继承Object
类和类的关系:继承关系,只能单继承(一个子类只能继承一个父类)但是可以多层继承
类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口(接口间用逗号隔开)
接口和接口的关系:继承关系,可以单继承,也可以多继承
抽象类作为形参时可创建对象(因为在主函数中调用时也是多态形式),即
public abstract class Animal
{
public abstract void eat();
}
public class AnimalOperator
{
public void useAnimal(Animal a)//在主函数中调用时也是多态形式
{
a.eat();
}
public Animal getAnimal()
{
Animal a = new Cat();
return a;
}
}
public class Cat extends Animal
{
public void eat()
{
System.out.println("猫吃鱼");
}
}
public class AnimalDemo
{
public static void main(String[] args)
{
AnimalOperator ao = new AnimalOperator();
Animal a = new Cat();
ao.useAnimal(a);//输出猫吃鱼
Animal a2 = ao.getAnimal();//new Cat()
a2.eat();//输出猫吃鱼
}
}
抽象类作为形参和返回值时,因为抽象类不能实例化,所以需要再创建一个子类继承该抽象类,再用多态形式创建对象
接口作为形参和返回值时情况与抽象类相同,创建一个接口的实现类