今天在写接口的时候发现了一个问题,使用@RestController注解下Controller中的方法返回对象(子类CourseInfo
)转为JSON数据时会有父类CourseBase
中private修饰的字段。此处分析一下Java中父类private字段能否被子类继承的问题。
问题场景
使用postman测试http://localhost:31200/course/coursebase/list/1/2?companyId=1
,返回JSON数据如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "success": true, "code": 10000, "message": "操作成功!", "queryResult": { "list": [ { "id": "402885816243d2dd016243f24c030002", "name": "大数据", "users": null, "mt": null, "st": null, "grade": null, "studymodel": null, "teachmode": null, "description": "111111大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据", "status": null, "companyId": null, "userId": null, "pic": "group1/M00/00/02/wKhlQFrQfNqAL0d_AALDG1Ia4xE439.png" } ], "total": 6 } }
|
后端返回的CourseInfo
对象转为JSON后,出现了从父类中继承的private
修饰的字段
父类中private字段能否被子类继承?
子类可以继承父类中的private
字段,但是子类继承过来之后,不能对直接进行引用访问,那是父类中的私有部分,只能对父类中的成员开放。
一般情况下,父类中会有公用接口get、set之类的方法(或者其他public
修饰的方法),可以通过这些方法进行访问。
demo
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @RestController @RequestMapping("/course") public class CourseController implements CourseControllerApi { @Autowired CourseService courseService;
@Override @GetMapping("/coursebase/list/{page}/{size}") public QueryResponseResult<CourseInfo> findCourseList( @PathVariable("page") int page, @PathVariable("size") int size, CourseListRequest courseListRequest) { return courseService.findCourseList(page,size,courseListRequest); } }
|
Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
@Service public class CourseService { @Autowired CourseMapper courseMapper;
public QueryResponseResult<CourseInfo> findCourseList(int page, int size, CourseListRequest courseListRequest) { if (courseListRequest == null) { courseListRequest = new CourseListRequest(); } if (page < 0) { page = 0; } if (size < 1) { size = 20; } PageHelper.startPage(page, size); Page<CourseInfo> courseListPage = courseMapper.findCourseListPage(courseListRequest); List<CourseInfo> result = courseListPage.getResult(); long total = courseListPage.getTotal(); QueryResult<CourseInfo> courseInfoQueryResult = new QueryResult<>(); courseInfoQueryResult.setList(result); courseInfoQueryResult.setTotal(total); return new QueryResponseResult<>(CommonCode.SUCCESS, courseInfoQueryResult); } }
|
Dao
1 2 3 4 5 6 7 8 9
|
@Mapper @Repository public interface CourseMapper { Page<CourseInfo> findCourseListPage(CourseListRequest courseListRequest); }
|
POJO
CourseInfo
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Data @ToString public class CourseInfo extends CourseBase {
private String id; private String pic; private String name; private String description; }
|
CourseBase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Data @ToString @Entity @Table(name="course_base")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid") public class CourseBase implements Serializable { private static final long serialVersionUID = -916357110051689486L; @Id @GeneratedValue(generator = "jpa-uuid") @Column(length = 32) private String id; private String name; private String users; private String mt; private String st; private String grade; private String studymodel; private String teachmode; private String description; private String status; @Column(name="company_id") private String companyId; @Column(name="user_id") private String userId; }
|