Extension private field in java

Tags:



I read the Spring Data source and meet a question: JdbcTemplate has a method:

public void setDataSource(@Nullable DataSource dataSource) {
    this.dataSource = dataSource;
}

and I find that this.dataSource is from it`s father class JdbcAccessor.declearing as follow

private DataSource dataSource;

my question is: why extension class JdbcTemplate can access its father class`s private field? I try to use it as follow and find IDE show its wrong

public abstract class A {
    @Nullable
    private Integer a;
}

public class B extends A {

    public void setA(@Nullable Integer a) {
        this.a = a;    <-- Wrong
    }
}

Answer

It can not. Most likely you used some sort of decompiler which couldn’t properly decompile it. The actual code is like this in JDBCTemplate

public JdbcTemplate(DataSource dataSource) {
    setDataSource(dataSource);
    afterPropertiesSet();
}

And setDatasource method is in JDBCAccessor.



Source: stackoverflow