第6天类的继承

1.的继承

语法

class 子类 extends 父类{

子类的属性

子类的方法

}

继承的特点:子类会把父类所有的属性和方法继承下来

代码

/**

 * 父类

*/

class Teacher{

String name;

int age;

public void sleep(){

System.out.println("老师在睡觉");

  }

 } 

/**

 * 子类的定义

 */

//class 子类 extends 父类{

class JavaTeacher extends Teacher{

public void teachJava(){

System.out.println(name+"老师正在教java"+"   年龄:"+age);

  }

}

 class PHPTeacher extends Teacher{

 public void teachPHP(){

System.out.println(name+"老师在教PHP"+"   年龄:"+age);

  }

}

class ExtendsDemo2{

public static void main(String[] args){

JavaTeacher  jt = new JavaTeacher();

jt.name = "张三";

jt.age = 30;

jt.teachJava();

PHPTeacher pt = new PHPTeacher();

pt.name = "李四";

pt.age = 40;

pt.teachPHP();

  }

 }

2.继承 内存

 

3.Super的特点

1.子类实例化的过程中父类的构造器先被调用,然后再调用子类的构造器。

2.子类的被调用的时候父类的默认构造器就会被调用(父类如果存在着有参数的构造器,一定要把默认构造器显式的定义出来)。

3.子类在调用父类的有参数的构造器的时候使用super(参数列表…),这时父类的默认的构造器就不会再被调用了。

代码1:

class Teacher{
String name;
int age;
//默认的构造器
public Teacher(){
System.out.println("父类默认构造器被调用");
}
//带参数的构造器,如果默认的构造器没显示出来,会被带参数的构造器覆盖掉
public Teacher(String name){
this.name = name;
System.out.println("父类有参数构造器被调用");
}

public void sleep(){
System.out.println("老师正在睡觉");
}
}

/**
*子类继承父类语法:class 子类 extends 父类
*/
class JavaTeacher extends Teacher{
public JavaTeacher(String name){
/**在子类的构造器中隐藏了调用super,这个super是无参数的
*无论子类的构造器带不带参数,都会调用父类的构造器
*/
//super();
//调用父类有参数的构造器,那么父类默认的构造器不会被调用,会被覆盖
super(name);//super一定要在第一行
this.name = name;
System.out.println("子类的默认构造器被调用");
}

public void teachJava(){
System.out.println(name+"老师正在教java");
  }
}

class ExtendsDemo4{
public static void main(String[] args){
JavaTeacher jt = new JavaTeacher("张三");
 }
}

代码2:

class Teacher{
String name = "任亮";
int age;
public void sleep(){
System.out.println("老师在睡觉");
}
}

/**
*子类继承父类语法:class 子类 extends 父类
*/
class JavaTeacher extends Teacher{
String name = "亮哥";
public void teachJava(){
//默认情况下单独的使用对象的熟悉时都隐藏了this.
System.out.println(this.name+"老师正在教java");
//加上super.,调用的是父类的属性
System.out.println(super.name+"老师正在教java");
}

/**父类和子类有同名的方法,在调用的时候会输出子类的方法
*如果要区分,在子类中使用this.sleep();super.sleep()
*/
public void sleep(){
System.out.println("Java老师在睡觉");

}
}

class ExtendsDemo5{
public static void main(String[] args){
JavaTeacher jt = new JavaTeacher();
jt.teachJava();
jt.sleep();
}
}

4.final:

1.修饰在属性上

class User{

//fianl修饰在属性上,属性的值不能再改变
final int username;

int password;
//fianl修饰在属性上,属性的值不能再改变
public static final float PI = 3.14f;


}

class FinalDemo1{
public static void main(String[] args){
User e = new User();
e.username = 123;//已经无法改变值
User.PI = 6.28f;//已经无法改变值
}
}

2.修饰在方法上

代码1:

class User{
int username;
int password;
//final修饰在方法上,子类继承父类无法对final方法进行重写
public final void login(int username,int password){
if(username == 123&&password == 123){
System.out.println("登陆成功");
}
}
}

class Emp extends User{
int empNo;
//子类对父类方法进行重写
public void login(int username,int password){
System.out.println("登陆成功");
}
}
class FinalDemo{
public static void main(String[] args){
Emp e = new Emp();
e.login(1,1);
}
}

3.修饰在类上

//使用final来修饰的类是不可以被继承的
final class User{
}

class Emp extends User{
int empNo;
}
class FinalDemo2{
public static void main(String[] args){
Emp e = new Emp();
}
}

猜你喜欢

转载自www.cnblogs.com/chenlei8/p/9975823.html