Java自学记录Day27
一、学习目标:
super关键字的使用与IDEA开发工具的配置
二、学习内容
(一)、了解super关键字的基本用法
1、super关键字
代表的是当前对象父类型的特征。
2、super.name调用父类中的属性,私有化属性不可以被访问
Test类
public class TestPet extends Dog{
public TestPet(){
this(4);
}
public TestPet(int number){
super(5);
}
public void test(){
System.out.println(super.name);
System.out.println(super.name="猪头");
}
public void pet(){
}
public static void main(String[] args) {
TestPet master=new TestPet();
master.test();
}
}
public class Dog extends Pet{
String name="旺财";
int age=2;
public Dog(){
this(1);//调用本类的构造方法
System.out.println(super.name);//二哈
}
public Dog(int age){
System.out.println(name)//旺财
System.out.println(super.name);//二哈
}
}
Pet类
public class Pet {
String name="二哈";
int age=0;
public Pet(){
}
public Pet(String name, int age){
super();//可省略
this.age=age;
this.name=name;
System.out.println("222222");
}
}
3、super();调用父类中的无参数构造方法,只能在子类中的构造方法第一行调用父类的构造方法。
并且一个构造方法中只能调用父类中一个构造方法,该语句书写在构造方法第一行。
super(int number);调用父类中的有参数构造方法。
Dog类
public class Dog extends Pet{
String name="旺财";
int age=2;
public Dog(){
this(1);//调用本类的构造方法
System.out.println(super.name);//二哈
}
public Dog(int age){
super("大黄",3);//书写在第一行,调用父类pet类中的含参数构造方法
System.out.println(age);//2
System.out.println(super.age);//3
System.out.println(super.name);//大黄
}
}
4、什么时候使用super,子类和父类有相同的属性和方法,在子类中调用父类的方法或属性。如果调用的是构造方法,则必须在子类的构造方法中调用且在子类构造方法第一行。
(二)、区分this和super关键字的不同
1、相同点:
关键字都不能在静态方法中使用,可以在实例方法和构造方法中使用。
在调用构造方法时,只能出现在构造方法的第一行,this();和super();
2、不同点
this.name表示当前对象的属性,super.name表示该对象父类中的name属性。
System.out.println(super.name);
this()是调用本类中的构造方法,super()是调用父类中的构造方法。
当父类和子类中都有相同的变量,调用父类变量是super.name,name是子类中的变量。
public class Dog extends Pet{
String name="旺财";
int age=2;
public Dog(){
this(1);//调用本类的构造方法
System.out.println(super.name);//二哈
}
public Dog(int age){
System.out.println(name)//旺财
System.out.println(super.name);//二哈
}
}
(三)、配置IDEA开发工具。
1、设置中搜索font修改字体大小
2、新建一个project,这里的project相当于eclipse中的一个工作区。找到最下的empty project。
3、新建一个module,选择java模块。
4、在模块里面可以新建各种文件,包括java class文件
知识点1:抽象类
1、类和类之间有共同特征;将这些特征提取出来形成的就是抽象类,因为类本身是不存在的,所以抽象类无法创建对象。
abstract class IdCard extends Card{
public static void main(String[] args) {
Card ming= new IdCard();//错误的,无法为抽象类创建对象。
}
}
abstract class Card{
public abstract void make();
}
2、抽象类属于引用数据类型。抽象类的语法是
[修饰符列表] abstract class 类名{
类体;
}
public abstract class Test{
}
3、抽象类是无法创建对象的,是用来被继承的,属于父类。final和abstract是对立的,不能联合使用。
4、抽象类的子类可以是抽象类,抽象类的父类一定是抽象类。抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法可以供子类使用。
知识点2:抽象方法
1、抽象方法表示没有实现的方法,是没有方法体的方法,修饰符列表中有abstract
public abstract void doSome();
2、抽象方法必须出现在抽象类中,抽象类中可以没有抽象方法。
public abstract class Card{
public abstract void make();
}
abstract class Card{
}
3、一个非抽象的类继承抽象的类,需要将抽象方法覆盖/重写。
class IdCard extends Card{
public void make() {
System.out.println(666);//方法重写
}
}
public abstract class Card{
public abstract void make();
}