package day2;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* @author jack
*
* super关键字
* super关键字代表了父类空间的引用
*
* supper关键字的作用:
* 1.子父类存在同名成员时,子类可以通过super关键字访问指定父类成员;
* 2.创建子类对象时,默认先调用父类构造方法,
* 也可以在子类构造方法使用super关键字指定调用父类构造方法;
*
* super关键字调用父类构造方法的注意点:
* 1.如果子类构造方法没有制定父类的构造方法,编译器会默认增加调用父类的无参构造方法;
* 2.super关键字调用父类的构造方法,必须是子类构造方法的第一个语句;
* 3.this调用本类构造方法和super调用父类构造方法的语句不能同时出现在一个构造方法中;
*
* super关键字与this关键字的区别:
* 1.代表的事物不一致
* 1.super代表父类空间的引用;
* 2.this代表了所属函数的调用者;
* 2.使用前提不一致
* 1.super关键字必须要有继承关系才能使用;
* 2.this关键字不需要继承关系也可使用;
* 3.调用构造方法的区别
* 1.super关键字是调用父类的构造方法;
* 2.this关键字调用的是本类的构造方法;
*
* 方法重写
* 父类的功能无法满足子类的需求,需要方法重写
* 方法重写的前提:存在继承关系
* 方法重写的注意事项:
* 1.方法名和形参列表必须一致;
* 2.权限修饰符,子类权限必须要大于等于父类权限;
* 3.返回值类型,返回值不同时,子类的返回值必须是父类的返回值的子类或者子子...类;
* 4.子类抛出的异常必须是父类抛出异常的子类或者子子...类;
*
* 方法重载
* 1.方法名要一致;
* 2.形参列表不一致(形参的个数或类型不一致);
* 3.与返回值无关;
*
*/
class Animal {
public void action() {
System.out.println("this is an animal !!");
}
}
class Dog extends Animal{
@Override
public void action() {
System.out.println("this is a dog !!");
}
}
class ChineseDog extends Dog{
@Override
public void action() {
System.out.println("this is a chinese dog !!");
}
}
class Person{
private String name;
public Person() {
System.out.println("Person无参构造方法被调用。。。。");
}
public Person(String name) {
this.name = name;
System.out.println("Person带参构造方法被调用。。。。");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Animal action() {
System.out.println("吃穿住行。。。。");
return new Animal();
}
}
class Student extends Person{
private int number;
public Student() {
System.out.println("Student无参构造方法被调用。。。。");
}
public Student(int number) {
this.number = number;
}
public Student(int number,String name) {
super(name); //指定调用父类带参构造方法,该方法需为子类构造方法的第一个语句;
this.number = number;
System.out.println("Student带参构造方法被调用。。。。");
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
String name = super.getName();
return "Student [number=" + number + " "+"name="+name+"]";
}
@Override
public ChineseDog action() {
System.out.println("吃穿住行,学。。。");
return new ChineseDog();
}
}
public class ExtendsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student sd1= new Student();
sd1.setNumber(110);
sd1.setName("小米");
System.out.println(sd1.toString());
Student sd2= new Student();
sd2.setNumber(119);
// sd2.name = "华为"; // name不可见 需要使用setName()方法设置
System.out.println(sd2.toString());
sd2.action();
File file = new File("D:\\", "jjn.txt");
if(!file.exists()) {
try {
file.createNewFile();
FileWriter fw = new FileWriter(file,true);
fw.write("test!!! day2");
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else
{
try {
FileWriter fw = new FileWriter(file,true);
fw.write("test!!! day2");
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}