一、继承
何为继承?java中定义的类如同现实中的人类一样,人有父亲有儿子,类也一样可以有父类和子类。子类通过关键字extends来继承父类的属性及方法。其中父类的私有属性和方法可以被继承,但不能被访问;父类的构造方法不能被继承(可以使用关键字super来调用父类的构造方法,例super(参数));父类的final方法在子类中不能被覆盖;
而子类可以拥有属于自己的属性及方法,且子类外加的属性和方法父类无法访问。子类对象属于子类也属于父类,父类对象只属于父类。可用关键字instanceof判断该变量所指向的对象是否属于该类,例如对象变名 instanceof 类名; 指向子类对象的父类变量属于子类,例如
父类 an=new 子类();an属于子类,an可以访问子类的方法,但是如果an访问的方法是子类复写的父类的,且父类中该方法是私有的,即使用private修饰的,则an只能访问父类的该方法。
二、多态
多态即为多种表现形式,方法的重写以及重载是多态的两种表现。重载,是指同一类中,具有相同的名称的方法,但方法的参数个数,顺序,类型不同的方法实现。重写是指子类具有和父类相同名称,返回值类型(也可以是返回值类型的子类),和形参列表;返回值类型不同时;子类重写的方法不能使用比被重写方法更严格的访问权限。静态方法不能被重写为非静态方法。final方法不能被重写。
三、抽象类及接口
抽象类是指类中含有抽象方法的类,抽象方法为只有定义没有方法体的方法。抽象类不能被实例化,抽象类的构造方法和static方法不能是抽象方法。抽象类用abstract修饰,抽象中的抽象方法必须被子类或子类的子类实现才能创建子类的对象。
接口为类中的所有方法都只有声明,没有方法体,用关键字interface修饰,接口不能有构造方法,一个类可以实现多个接口,用关键字implement实现。接口中的常量和方法只能用public修饰。
package inheritance;
public class Employee {
private String name;
private int age;
private double salary;
static int number=1;
public Employee(String name ,int age, double salary) {
this.name=name;
this.age=age;
this.salary=salary;
}
public Employee(){
this("张三",18,2000.0);
}
public double getsalary() {
return salary;
}
static int getnumber() {
final int i=100;
System.out.println(i);
System.out.println("fulei");
return number;
}
}
package inheritance;
public class Manager extends Employee {
private double bonus;
public Manager(double bonus) {
super("李四",30,4000);
this.bonus=bonus;
}
public Manager () {
this(3000);
}
public double getsalary() {
return super.getsalary();
}
public static int getnumber() {
System.out.println("zilei");
int i=10;
System.out.println(i);
return number;
}
}
package inheritance;
public class TestEmployee {
public static void main(String[] args) {
Employee employee1=new Employee();
Employee manager1=new Manager();
System.out.println(employee1.getsalary());
System.out.println(manager1.getsalary());
System.out.println(manager1 instanceof Manager);
System.out.println(manager1.getnumber());
}
}
package inheritance;
public abstract class Shape {
private double length;
private double width;
public Shape(){
this(0,0);
}
public Shape(double length,double width) {
this.length=length;
this.width=width;
}
public double getlength() {
return length;
}
public double getwidth() {
return width;
}
public abstract double area();
}
package inheritance;
public class Triangle extends Shape{
public Triangle() {
this(0,0);
}
public Triangle (double num1,double num2) {
super(num1,num2);
}
public double area() {
return getlength()*getwidth()/2;
}
}
package inheritance;
public class Rectangle extends Shape{
public Rectangle (double num1,double num2) {
super(num1,num2);
}
public Rectangle () {
this(0, 0);
}
public double area() {
return getlength()*getwidth();
}
}
package inheritance;
public class Judge {
public double area(Shape shape){
return shape.area();
}
}
package inheritance;
public class TestShape {
public static void main(String[] args) {
Judge judge=new Judge();
//System.out.println(judge.area(new Shape(3,4)));
System.out.println(judge.area(new Triangle(3,5)));
System.out.println(judge.area(new Rectangle(3,5)));
}
}
package inheritance;
public interface Runner {
public void run();
}
package inheritance;
public interface Constants {
public static final int COLOR_RED=1;
public void say();
}
package inheritance;
public class Car implements Runner,Constants {
public static void main(String[] args) {
Car car=new Car();
car.run();
car.say();
}
@Override
public void say() {
System.out.println("车的颜色是:"+COLOR_RED);
}
@Override
public void run() {
System.out.println("车会跑");
}
}