继承
概念解析:
类别
- 例如:大学生类在学生类中,这两个类之间存在继承关系
- 其中学生类是大学生类的父类
- 大学生类是学生类的子类
- 子类能够继承父类的所有东西
** 继承的关键字**:extends
格式:
public 子类名 extends 父类名{
}
子类及子类对象可以调用继承到的哪些属性和方法呢?:
public ------ 公共的
不写 ------ 缺省的
private------ 私有的
protected ------- 保护的
- public指src中自己所有写的代码都放在src中
- 缺省的指package给类文件进行分类储存
- private指类{ }中私有的东西
- protected指当前类文件中的代码文件
public、缺省、private、 protected都有访问权限修饰符的限定范围
- public在整个项目中都有
- 缺省的同包下都有
- private只在整个类的{ }中存在
- protected在同包下以及不同包下的子类中都存在
子类及子类对象可以调用继承到的属性和方法有:
在同包下中:
- 子类中以及非子类中的子类对象,只有private修饰的不可以被调用;
在不同包下:
- 在子类{ }中,子类与父类不同包时,子类中私有的以及缺省的不可以被调用
- 非子类中:子类对象只能够调用public修饰的。
子类在父类的基础上扩展时是抽象的,类相对于对象来说也是抽象的:
- 1.子类继承了父类的属性和方法之后,也能够增加自己的属性和方法。
- 2:子类中可以重写父类的方法,并改造方法体的内容。
举一个例子:
动物类:吃:食物,就会有吃肉食和吃素食的。
格式:一般情况下除了方法体之外都要与父类一致
访问权限修饰符、返回值类型、方法名都要一致。
自动转型:
转型分为自动转型和强制转型。
- 强制转型是不安全的
- 自动转型时安全的。
-子类对象可以自动转型为父类类型
A a =new A();
A a =new B();
要使A a=new B()
成立,首先A得是B的父类
自动转型后:
- 子类对象自动转型之后是不能调用子类独有的属性和方法的。
- 子类对象自动转型之后会优先调用重写的方法。
- 子类对象转型为父类类型是自动转型是安全的
- 父类类型变量名转为子类类型是强制转型是不安全的,需要检查一下原本的类型是什么。
Code:
-首先创建一个类名,写下其属性 public、int、private、protected,其中adr是私有的不能够直接被调用,需要设置Adr的方法使得子类对象能够得到Adr,学生类和大学生类共有的是成绩exam,打印输出,返回
public class Student {
public String name;
private String adr;
int age;
protected int id;
public void setAdr(String adr) {
this.adr = adr;
}
public String getAdr() {
return adr;
}
public String exam(int age){
System.out.println("父类的考试方法");
return name;
}
}
-在创建一个类名继承extends Student,写下属性 cet4,大学生需要考四级证书,输入打印输出的方法,在{ }中分别打印输出
public class UNstudent extends Student{
int cet4;
public void printInfo() {
System.out.println("name:"+name);
System.out.println("age:"+age);
System.out.println("adr:"+getAdr());
System.out.println("id:"+id);
}
-在共有的成绩exam中,打印输出子类重写父类考试的方法,返回
public String exam(int age) {
System.out.println("子类大学生类重写方法");
return name;
}
}
-再创建一个类名,主方法中创建一个子类对象,子类对象依次分别调用name、id、age、adr。private是私有的不能够被直接调用,子类对象需要调用设置的Adr,使得adr等于子类对象调用得到的Adr,打印输出
-子类的对象调用exam赋值为20,申明的父类对象等于子类对象,申明的父类对象调用exam的赋值,以此类推
public class Manage {
public static void main(String[] args){
UNstudent unstu=new UNstudent();
unstu.name="QQ";
unstu.age=20;
unstu.id=01;
unstu.setAdr("Adr");
String adr=unstu.getAdr();
System.out.println("adr:"+adr);
unstu.printInfo();
unstu.exam(20);
Student stu1=unstu;
stu1.exam(20);
UNstudent unstu2=(UNstudent) stu1;
unstu2.exam(20);