一this用法:
⑴.访问本类成员变量。
⑵.在本类成员方法中,访问另一个成员方法。
二父类与子类继承的主要优势在于代码的可重用性。
父类的数据和方法可用于它的子类,但如果将父类的数据和方法声明为私有使用关键字为(private),则子类不能访问他。
创建子类的对象时,他将会包含父类的所有方法和属性,但是子类永远不会继承父类的构造方法。子类的构造方法可以调用父类的构造方法。需要注意的是,
父类的构造方法的调用总是先于子类的构造方法的调用。
2.1 super关键字
通过使用关键字super程序员可以从子类构造方法中调用父类中的默认构造方法或带参数的构造方法。
调用父类构造方法的语句应该为子类构造方法中的第一个语句,因为父类的存在先于子类。子类构造方法调用super()时,它调用的是直接父类的构造方法。
Super()总是指向调用类的直接父类。
三abstract修饰符
实际中存在这种的情况:父类中的某些方法不包括任何逻辑,并且这些方法需要由子类来重写。这时应该使用修饰符abstract来声明父类中的方法,由子类提供这种abstract方法的实现细节。而父类仅提供此方法的名称和声明 没有方法的主体
3.1抽象方法
要声明一个抽象类,应该在class关键字前加上修饰符abstract。
⑴加上Abstract关键字,去掉大括号,直接分号结束。
①抽象类不能直接使用,不能直接实例化。
②必须用一个子类来继承抽象的父类。
③子类必须覆盖重写抽象父类中的所有抽象方法。
⑵一个抽象类不一定含有抽象方法,但是一个有抽象方法的类一定是抽象类。
代码与程序运行结果
package com.hg.day10.demo01;
public class Fu {
int num=19;
public Fu() {
}
public Fu(int n) {
}
}
package com.hg.day10.demo01;
public class Zi extends Fu{
int num=20;
public Zi(){
super();
System.out.println("我是子类的无参构造方法");
}
public Zi(int n){
this.num=n;
System.out.println("我是子类的有参构造方法"+n);
}
public Zi(int n,String name){
this(1000);
System.out.println("我是子类的有参构造方法"+n);
}
public void showNum() {
int num=30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
public void methodA() {
System.out.println("AAA");
}
public void methodB() {
this.methodA();
System.out.println("BBB");
}
}
package com.hg.day10.demo01;
public class demo01Extends {
public static void main(String[] args) {
Zi zi=new Zi();
}
}
package com.hg.day10.demo02;
public abstract class Animal {
public Animal() {
System.out.println("我是父类中的构造方法");
}
public abstract void eat();
public abstract void foot();
public void normalmethed() {
}
}
package com.hg.day10.demo02;
public class Pig extends Animal{
public Pig(){
super();
System.out.println("子类的构造方法");
}
public void eat() {
System.out.println("猪吃糠");
}
public void foot() {
}
}
package com.hg.day10.demo02;
public class MyAbstract {
public void sleep() {
}
}
package com.hg.day10.demo02;
public class Demo02Main {
public static void main(String[] args) {
Pig pig=new Pig();
pig.eat();
}
}
package com.hg.day10.demo03;
public abstract class Animal {
public Animal() {
System.out.println("我是抽象父类中的构造方法"); }
public abstract void eat();
public abstract void sleep();
}
package com.hg.day10.demo03;
public abstract class Monkey extends Animal{
public void eat() {
System.out.println("猴子吃香蕉");
}
}
package com.hg.day10.demo03;
public class GoldMonkey extends Monkey{
public void sleep() {
System.out.println("金丝猴 吃鸟蛋、苔藓 睡觉");
}
}
package com.hg.day10.demo03;
public class MonkeyMacque extends Monkey {
public void sleep() {
System.out.println("猕猴 在树上睡觉");
}
}
package com.hg.day10.demo03;
import com.hg.day10.demo02.Pig;
public class Demo03Main {
public static void main(String[] args) {
GoldMonkey goldMonkey=new GoldMonkey();
goldMonkey.eat();
goldMonkey.sleep();
System.out.println("=========");
MonkeyMacque monkeyMacque=new MonkeyMacque();
monkeyMacque.eat();
monkeyMacque.sleep();
}
}