目录
1.相关概念
继承:
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 [1]
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
抽象:
Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。
2.继承
2.1 继承的引入
三个类都有重复的代码,可以把这共同的代码抽出去,抽出去放到另外一个类里面;下面的3个类和上面的类需要发生一点关系(继承),上面的类叫做 父类(超类,基类,根类),下面的类叫子类(派生类,拓展类);
好处 : 提高了代码的复用性
2.2继承作用
代码复用,提高开发效率和程序的扩展性。
2.3 Java中类继承的基本语法(重点)
① Java类中的继承的语法格式:
class A{}
class B extends A{}
A 就是B的父类、基类、根类、超类
B是A的子类、派生类、拓展类
② 验证:子类中是否可以继承到父类中的东西(通过创建子类对象来操作从父类继承的东西)
//案例代码:
//父类:
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 Bird extends Animal{
/**
* 鸟类独有方法
*/
public void fly() {
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);
//调用子类特有方法
person.coding();
pig.name = "佩奇";
pig.age = 7;
pig.eat();
System.out.println(pig.name);
System.out.println(pig.age);
//调用子类特有方法
pig.gongBaiCai();
}
}
2.3 子类可以从父类继承哪些成员?
除了构造方法不能被继承其他都可以继承过来
但是,私有化成员不能直接通过子类对象直接访问,但是可以通过继承过来的公共方法间接访问。
代码如下:
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("敲代码...");
}
}
//测试代码:
/**
* 测试继承哪些成员
*/
public class AnimalTest {
public static void main(String[] args) {
//创建子类对象
Person person = new Person();
//通过子类对象调用父类继承过来的普通成员变量
person.str = "张三";
//通过子类对象调用父类继承过来的私有化成员变量
// person.a = 1;//不能通过子类对象直接调用父类私有化成员
//通过子类对象调用父类继承过来的静态成员变量
// person.b = 2;//不要这样用。 这里编译的时候,会将person对象直接编译为类名的方式
//通过子类对象调用父类继承过来的普通方法
person.test();
//通过子类对象调用父类继承过来的静态方法
// person.testStatic();//不要这样用。 这里编译的时候,会将person对象直接编译为类名的方式
//通过子类对象调用父类继承过来的私有化方法
// person.testPrivate();//不能直接调用私有化方法
//子类调用可以通过父类公共方法间接调用父类中私有化的成员
person.setA(69);
int a = person.getA();
System.out.println(a);//69
//调用Object继承过来的方法
int hashCode = person.hashCode();
System.out.println(hashCode);
}
}