继承
1.1 继承作用
1.代码复用,提高开发效率和程序的扩展性。
1.2 Java中类继承的基本语法
案例代码:
父类:
public class Animal {
String name;
int age;
public void eat() {
System.out.println("吃");
}
}
子类:
public class Person extends Animal{
/**
* 人类独有方法
*/
public void coding() {
System.out.println("敲代码...");
}
}
public class Pig extends Animal{
/**
* 猪类独有方法
*/
public void gongBaiCai() {
System.out.println("拱白菜...");
}
}
测试类:
/**
* 继承测试类
*/
public class AnimalTest {
public static void main(String[] args) {
//创建子类对象
Person person = new Person();
Pig pig = new Pig();
//通过子类对象调用父类继承过来的成员
person.age = 1;
person.eat();
System.out.println(person.name);
System.out.println(person.age);
}
}
1.3 子类可以从父类继承得成员
1.除了构造方法不能被继承其他都可以继承过来
2.私有化成员不能直接通过子类对象直接访问,但是可以通过继承过来的公共方法间接访问
代码如下:
public class Animal {
String str;
private int a;
static int b;
public Animal() {
System.out.println("无参构造...");
}
public Animal(int a) {
System.out.println("有参构造...");
}
public void test() {
System.out.println("普通方法");
}
public static void testStatic() {
System.out.println("静态方法..");
}
private void testPrivate() {
System.out.println("私有化方法..");
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
public class Person extends Animal{
/**
* 独有方法
*/
public void coding() {
System.out.println("袋鼠妈妈!!袋鼠妈妈有个袋袋...");
}
}
1.4 继承特点
1.单继承(一个类只能够有一个直接父类)
2.多重继承(多层级的继承), 一个类可以有子类,子类还可以子类
3.每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承Object
2. 方法覆写
1.方法覆写的主要作用就是:保证业务逻辑合理性
2.1 方法覆写语法
1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。前提是父类的方法没有被被final(中文意思:最终的,以后讲)修饰
2、子类方法和父类方法的方法签名(方法名+参数列表)完全一致;
3、访问权限 : 子类方法的访问权限 大于等于父类方法的访问权限
4、static/private 方法不能够被重写 (java语法)
5、返回值类型 : 子类方法的返回值类型可以是父类方法的返回值类型的子类或者相等
6、子类抛出的异常(Exception)下是父类相应方法抛出的异常或者相等
实例代码:
public class Person extends Animal{
@Override //注解,编译期起作用,校验代码
public void eat() {
System.out.println("中村名菜。。。。");
}
}
测试
/**
* 方法重写测试类
*/
public class AnimalTest {
public static void main(String[] args) {
//创建子类对象
Person person = new Person();
person.eat();//执行子类重写后方法
}
}
3. 抽象类
3.1 抽象类
1、抽象类:就是用abstract修饰的类。
2、抽象类作用:就是用来装抽象方法的。
3、语法:命名一般类名AbstractXxx
修饰符 abstract class AbstractXxx{
实例变量
类变量
实例方法
类方法
构造方法 // 语法规定:抽象类不能创建对象。只能在子类中通过super使用
抽象方法:修饰符 abstract 返回值类型 方法名(...);
}
实现步骤代码:
public class Circle extends AbstractGraph {
private double r;
public Circle() {}
public Circle(double r) {
this.r = r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
@Override
public double getArea() {
return Math.PI * r * r;
}
}
测试代码:
/**
* 抽象类测试练习
*/
public class GraphTest {
public static void main(String[] args) {
// 创建 子类对象
Circle circle = new Circle(5);
// 调用父类继承过来的方法
double circleArea = circle.getArea();
System.out.println("圆形面积:"+circleArea);
}
}