1. 概念:将这些类的共性内容,抽取到一个独立的类中,让独立的类的多个类产生一种关系
2. 格式:class Zi extends Fu{}
3. 好处:1).提高了代码的复用性和维护性
2).类与类之间产生了关系:耦合性,这种关系是多态的前提条件
4. Java开发的原则:高内聚,低耦合
5. 继承的特点:
a) java中,只支持单继承,不支持多继承
b) 但可以多层继承
6. 子类继承父类, 只能继承父类中非私有的成员(成员变量/成员方法),不能继承父类的构造方法,但可以通过super()间接访问
7. 什么情况下使用继承?
A类是B类的一种,或者B类是A类的一种,则可以是继承关系
8. super()关键字:表示父类的一个空间标识(简单记:代表父类的对象)
9. this与super的区别:
a) 位置不同:
i. this.成员变量:访问本类的成员变量;
ii. super.成员变量:访问父类的成员变量
b) 成员方法:
i. this.成员方法:本类的成员方法
ii. super.成员方法:父类的成员方法
c) 构造方法:
i. this()/this(“”):访问当前类的构造方法
ii. super()/super(“”):访问父类的构造方法
10. 子类继承父类,会默认访问父类的无参构造方法,如果父类没有无参构造,则子类构造方法全部报错,解决方法:
a) 手动给出父类的无参构造
b) 子类的构造方法(有参或者无参)的第一句话:super(“传参”),通过父类的有参构造间接访问
c) 子类的(有参构造)第一句话:this(),间接访问父类的有参构造.
继承的相关程序
1.代码块的执行顺序
class Fu4 {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu4() {
System.out.println("构造方法Fu");
}
}
class Zi4 extends Fu4 {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi4() {
System.out.println("构造方法Zi");
}
}
public class ExtendsTest2 {
public static void main(String[] args) {
Zi4 z = new Zi4();
}
}
执行结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
2.老师和学生的继承
package 继承与面向对象;
/*老师和学生的共同属性是姓名,年龄(成员变量)
* 赋值方式set()
* 成员方法:我爱Java
* */
class Student{
//私有化成员变量
private String name;
private int age;
//成员变量赋值:set()-get()方式
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//成员方法
public void show(Student s){
System.out.println("姓名:"+s.getName()+",年龄:"+s.getAge());
}
public void show2(){
System.out.println("我爱Java");
}
}
//继承关系,老师继承学生
class Teacter extends Student{}
public class StudentTeacter {
public static void main(String[] args) {
//创建对象1
Student s=new Student();
//成员变量赋值
s.setName("A");
s.setAge(20);
//调用成员方法
s.show(s);
s.show2();
//创建对象2
Teacter t=new Teacter();
//成员变量赋值
t.setName("B");
t.setAge(30);
//调用成员方法
t.show(t);
t.show2();
}
}
执行结果:
姓名:A,年龄:20
我爱Java
姓名:B,年龄:30
我爱Java
3.中国四大美女
/*利用static,减少代码*
*/
class Person{
String name;
int age;
static String country;
//变量输入姓名,年龄
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//变量输入姓名,年龄,国籍
public Person(String name, int age,String country ) {
super();
this.name = name;
this.age = age;
this.country=country;
}
public void show(){
System.out.println("姓名是:"+name+"年龄是:"+age+"国籍是:"+country);
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p1=new Person("西施",23,"中国");
p1.show();
Person p2=new Person("貂蝉",23);
p2.show();
Person p3=new Person("杨贵妃",24);
p3.show();
Person p4=new Person("王昭君",25);
System.out.println("......................");
p1.country="美国";
p1.show();
p2.show();
p3.show();
}
}