zoukankan      html  css  js  c++  java
  • 访问权限和this,super关键字

    权限解析

    java有四种访问权限,private default protected public。

    private:私有的,只有在自己的类中可以访问。

    default:就是不加任何修饰符,允许在自己类中访问,也运行同包中访问。

    protected:允许在自己类中访问,同包中访问,子类访问。

    public:任何情况下都可以访问。

    package a;
    
    public class Test1 {
    	protected void hello1(){
    		System.out.println("hello");
    	}
    }
    
    package a;
    
    public class Test2 {
    	public void hello2(){
    		Test1 t1 = new Test1();
    		t1.hello1();
    	}
    }
    
    package b;
    
    import a.Test1;
    
    public class Test3 extends Test1{
    
    	public void hello3(){
    		Test1 t1 = new Test1();
    		t1.hello1();//错误代码
    		
    		super.hello1();
    		this.hello1();
    		Test3 t3 = new Test3();
    		t3.hello1();
    	}
    }
    

     Test1和Test2在同包下,Test3不同包但是是Test1的子类。

    如果hello1是default权限,在Test2中的hello2方法的写法是没有问题的,在Test3中就都不可以。

    如果hello1如上是protected权限就有不同了。对于Test2来说,同样没有问题。而Test3就有问题,Test3中的t1.hello1();就是错误代码。按道理来说,protected可以在子类中访问啊,不是应该没问题么。

    因为是不同包的情况,所以t1.hello1();写法不可以。应该用的是Test3 t3 = new Test3(); t3.hello1();这种形式。或者super.hello1(); this.hello1();

    当然,这些代码只能在Test3中使用,如果离开Test3同样不可以。

    正是由于这个原因,那么protected常作为需要重写的方法的描述符。

    this关键字指的就是当前对象。

    super指向的是在子类实例化时创造的父类对象(这个对象与父类自己new出来的有一定区别)。

    super相关

    package a;
    
    public class Test1 {
    	
    	public Test1(){
    			
    	}
    	
    	public Test1(String s){
    		
    	}
    }
    
    package b;
    
    import a.Test1;
    
    public class Test3 extends Test1{
    
    	public Test3(){
    		super("test3");
    		System.out.println("test3");
    	}
    }
    

     对于任何一个类来说,它默认是有一个构造方法(如果加上了其他构造方法,默认的就消失了),而构造方法当中会隐式的调用父类的构造方法。对于Test1来说,会默认调用父类Object的默认无参构造方法。Test2会默认调用Test1的默认无参方法。

    当然可以显式的调用,比如super("test3");,不过显式调用父类构造方法必须要放在构造方法的第一行,如果放在System.out.println("test3");后面就会报错。

    如果父类没有默认的无参构造方法,比如把第一个构造方法注释掉,那么此时只能够显式的调用构造方法,否则报错。

    因为任何类都需要调用父类的构造方法。

     
  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/tp123/p/6406576.html
Copyright © 2011-2022 走看看