标签:无法访问 ogr 允许 image private imm 修饰符 setname 自动
Java使用extends
关键字来实现继承
package test;
public class Person {
private int age;
private String name;
public void fun1(){
System.out.println(this.name+" "+this.age);
}
public int getAge() {
return age;
}
public String getName(){
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
//下面让Student继承Person类
class Student extends Person{
public static void main(String[] args) {
Student a=new Student();
a.setName("Jimmy");
a.setAge(18);
System.out.println(a.getName()+" : "+a.getAge());
//我们可以看到,Student并没有自己创建name,age,但是从Person类继承过来了
}
}
//执行结果为Jimmy : 18
在OOP(object-oriented programming
面向对象编程)的术语中,我们把Person
称为超类(super class),父类(parent class),基类(base class),把Student
称为子类(subclass),扩展类(extended class)
JAVA的每一个类只允许拥有一个父类,任何类,除了object,都会继承一个类。因此,除了object没有父类,Java中任何一个类有且只有一个父类。
子类可以从父类继承属性和方法,但如果父类的属性和方法用private
修饰时,则子类无法访问父类的东西,这就使得继承的作用被削弱了,如果想让子类可以访问父类,可以将父类中的private
非访问修饰符改为protected
。
package test;
public class Person{
private int age=10;
}
class Student extends Person{
public void test(){
System.out.println(age);
//age此处会显示错误:age‘ has private access in ‘test.Person‘
}
}
//----------------------方法1----------------------------
package test;
public class Person{
protected int age=10;
}
class Student extends Person{
public void test(){
System.out.println(age);
}
}
class RunTest{
public static void main(String[] args) {
Student a =new Student();
a.test();
}
}
//----------------------方法2----------------------------
/*
注意上面是用public修饰的test() 方法来访问父类属性,
如果使用static的main方法来访问,则需要new一个Person对象出来才行
*/
package test;
public class Person{
protected int age=10;
}
class Student extends Person{
public static void main(String[] args) {
Person b=new Person();
System.out.println(b.age);
}
}
如果父类没有默认的构造方法,子类就必须显式调用super()
并给出参数以便让编译器定位到父类的一个合适的构造方法。
//详情请查看 super关键字 一级标题里的内容
这里还顺带引出了另一个问题:即子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。
Java只支持单继承,多层继承,不允许多重继承。就是说,一个子类只能有一个父类。
标签:无法访问 ogr 允许 image private imm 修饰符 setname 自动
原文地址:https://www.cnblogs.com/jimmy888/p/13580890.html