class Person
{
private int age;
public Person()
{}
public Person(int age)
{
this.age=age;
}
public void SetAge(int age)
{
this.age=age;
}
public int GetAge()
{
return age;
}
}
//JAVA用关键字extends作为继承
//格式
//class 父类{}
//class 子类 extends 父类{}
//实例化子类对象的时候,会先调用父类的构造方法,再调用父类的构造方法
//如果一个类没有构造方法,java编译器会给它定义一个空的构造方法。比如说
//Person里面没有实现构造方法,那你编译它的时候有这么一个空白的构造方法
//编译器会帮你自动的加上 public Person(){};这么一句话。
//我子类构造方法调用之前,会自动的父类的构造函数。假设我们父类有很多个构造函数,那你子类构造的时候调用哪一个呢,它就默认调用父类的super();这个构造函数,
//这个表示没有参数的父类的构造函数。你写不写,他都是这样的。你如果不想调用无参数的构造函数,想调用有参数的构造函数,就用super(5)这样就可以了,super(参数)这种方法就可以了。但是值得注意的就是要么你都不写,要么你就自己写出一个空的构造函数,如果你写了其他的构造函数的话,系统就不会默认给你补一个构造函数了。
class Student extends Person
{
String School;
Student(String School)
{
super(5);
this.School=School;
}
String GetSchool()
{
return School;
}
}
public class Inherit
{
public static void main(String args[])
{
Student stu=new Student("mtk");
//stu.SetAge(24);
stu.GetSchool();
System.out.println(stu.GetAge());
System.out.println(stu.GetSchool());
}
}
//final关键字:fina类不能有子类
// final方法不能被覆写
// final变量变成常量,不能被修改
//
//继承的限制:父传子
// 1。一个父类的一个属性如果是私有的话,那它的子类就无法直接访问 这个父类的属性。它的父类可能会实现一个方法让你这个子类通过
// 这个方法去访问这个私有属性。
// 2.父类如果它的某个方法定义成私有方法,这个子类也是无法去调用这 个方法的。
// 3.子类不能私吞父类的方法,就是你子类继承了父类的方法,你还可以 往下传
//
interface A{
public static int i=10;
public abstract int getNum();
}
interface B{
public static String name="InterfaceB";
public abstract String getName();
}
abstract class Father
{
//抽象类的作用是作为模板,指定你这个继承者必须实现某些方法
//对抽象类来说不能实例化对象,比如说在这个例子里面
//你如果 Father f=new Father();就会出错
public abstract void study();
}
class Son implements A,B
{
public int getNum()
{
return i;
}
public String getName()
{
return name;
}
}
class Daughter extends Father
{
public void study()
{
System.out.println("I am sleep");
}
public void sleep()
{
System.out.println("I am sleep too");
}
}
public class Abstract
{
public static void main(String args[])
{
Son fa=new Son();
System.out.println(fa.getNum());
System.out.println(fa.getName());
Father fb=new Daughter();
fb.study();
}
}
class Father
{
private int money;
public int GetMoney()
{
return money;
}
public void SetMoney(int money)
{
this.money=money;
}
public void printInfo()
{
System.out.println("This is father");
}
}
class Son extends Father
{
public void printInfo()
{
System.out.println("This is Son");
}
public void playGame()
{
System.out.println("son play game");
}
}
class Daughter extends Father
{
public void printInfo()
{
System.out.println("This is daughter");
}
public void playGuitar()
{
System.out.println("play Guitar");
}
}
public class Abstract
{
public static void main(String args[])
{
Father son=new Son();
printInfo(son);
Father daughter=new Daughter();
printInfo(daughter);
}
public static void printInfo(Father f)
{
if(f instanceof Son)
{
Son s=(Son)f;
s.playGame();
}
else
{
Daughter d=(Daughter)f;
d.playGuitar();
}
f.printInfo();
}
//instanceof:用来判断一个对象是不是某个类的实例
}