package testClass;
public class Person {
String name;
int age;
//构造器用来生成实例,可以设置一些默认值.
// 如果不写出来,编译器也会自动生成一个构造器
//构造器和类同名,不能有返回值,前面加一个public
//使用new关键字其实是在调用构造器,并在堆中开辟空间
public Person(){
this.name = "Tom";
}
//有参构造,调用时可以传入参数
//如果写了有参构造,就必须写出无参构造
public Person(String name){
this.name = name;
}
//可以有多个构造器
//类里的方法可以互相调用
public Person(String name, int age) {
this(name);//调用其他构造器。当构造器的代码很多时,常用此方法
this.age = age;
}
public void talk(){
System.out.println("我是"+this.name);
}
}
package testClass;
//一个子类可以拥有父类的属性和方法,称为继承
//java支持单继承不支持多继承,多继承可以通过接口实现
public class Student extends Person{
//Person类public的属性,Student对象都可以使用
//Private属性不可以继承
public void study(){
//创建子类的对象时会先调用父类的无参构造,可以在子类的构造方法中加上super(),明确要先调用父类的无参构造。
super();//如果想要使用父类的有参构造,就加上参数
//也可以用super关键字调用父类的其他属性和方法
super.talk();
System.out.println(this.name+"在学习。");
}
}
通过以下代码可以使用上面的两个类
public class Application {
public static void main(String[] args) {
//类是抽象的,需要实例化创建对象
Student jack = new Student();
jack.name = "Jack";
jack.age = 15;
jack.study();
}
}
当父类子类和方法中都有同名的变量,优先调用方法中的变量,如果想要使用父类的变量就使用super关键字,想使用子类的变量就使用this关键字。同名方法的调用方式类似。
public class Fu{
int age = 50;
}
public class Zi{
int age = 30;
public void print(){
int age = 20;
System.out.println(age);
System.out.println(super.age);
System.out.println(this.age);
}
public class Demo{
public static void main(String[] args){
Zi z = new Zi();
z.print();
}
}
java中只可以单继承,不可以多继承。但是可以多层继承。比如Son继承Father,Father类继承Grandfa类。