Java基础——protected访问修饰符探讨

Java基础——protected访问修饰符探讨

根据官方说法:(如图)

protected修饰符是可以修饰其他包中的自损类的,但是我做了个实验,结果发现了一个有趣的现象!

具体请往下看:

package com.demo1;

public class Demo1 {
    protected Demo1(){
        System.out.println("protected");
    }
    protected void function(){
        System.out.println("受保护方法");
    }
}

package com.demo2;

import com.demo1;
public class Demo2 extends Demo1{
    public Demo2(){
        super();//调用不同包中父类受保护的方法成立
        }
    public static void main(String[] args) {    FinalDemo f=new FinalDemo();//先把Demo1的构造函数改为public,否则提示新建对象失败,提示构造函数要public才行
      f.function();//提示此方法要是public类型

    }
}

我新建了2个不同包中的类(Demo1和Demo2),其中Demo2继承Demo1;

1.在Demo2的构造函数中调用其父类Demo1的构造函数(注意:Demo1的构造函数被protected修饰),调用成功;印证官方说法。

2.这时把Demo1类的构造函数改成public;然后再Demo2的主函数中new一个Demo1的对象,并调用Demo1的protected function()方法;这是就提示function()方法的修饰符不能为protected,要改为public;与官方说法又相互背离。
现在我疑问慢慢???望高手前辈们赐教。

时间: 2025-01-01 02:26:37

Java基础——protected访问修饰符探讨的相关文章

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

java基础之访问修饰符protected

java的访问修饰符protected关键字让我很迷惑,网上的很多人业内人士的自我注解也依然没有消除我对这个关键字的认识. 我的疑惑有以下几点: 1:增设protected关键字的初衷,也就是说:这个的"受保护"的原理是什么?? 2:在Think in Java中,对protected定义是有误的. 3:protected的作用到底是什么呢? 4:涉及到继承. 在java编程思想中:通过阅读,我的理解是: 关于对有protected访问修饰符的类的继承,可以分为两种情况: (1)不同包

(转) java中的访问修饰符

对Java中的修饰符一直记不住,现在结合网上的一些资料进行总结,并重点说明一下protected修饰符. 一. Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节.访问控制分为四种级别: (1)public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: (2)protected: 用protected修饰的类.类属变量及

C# 基础(一) 访问修饰符、ref与out、标志枚举等等

C# 基础(一) 访问修饰符.ref与out.标志枚举等等 一.访问修饰符 在C#中的访问修饰符有:private.protected.internal.public public:公共类型,同一程序集或其他程序集都可以访问此成员 private:私有类型,同一类里或结构里才可以访问此成员 protected:保护类型,同一类里或者派生类中才可以访问此成员 internal:内部类型,只有在同一程序集才可以访问此成员 访问性不一致:子类的访问权限不能比父类高.防止暴露父类的信息.. 二.stat

解析Visual C# 7.2中的private protected访问修饰符

去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private protected访问修饰符(Access Modifier).至此,C#语言的访问修饰符有以下几种: private protected public internal internal protected private protected 既然有了private和protected,那么privat

[转]java构造方法的访问修饰符

http://my.oschina.net/u/1464678/blog/210359 1.       类(class) 可见性修饰符: public—在所有类中可见,在其他包中可以用import导入.                              缺省—就是没有修饰符,在同一个包中的类中可见,在其他包中不能用import导入.               修饰符:final—终态类,表示该类不能被继承 abstract—抽象类,不能新建对象 2.       变量(variabl

JAVA中的访问修饰符和包

一.JAVA访问修饰符 访问修饰符,用来控制类中成员的可见性 有四个访问修饰符,分别是:default,private,public,protected 1.default(默认):默认时不需要写修饰符的.只能在同一包内访问. 2.private(私有):只能在同一类中访问. 3.public(公有):在任何地方都可以访问 4.protected(受保护的):类的继承中使用 二.包package 在大型项目中,往往会有几十甚至几百个类,如果不对类进行分类管理,后期进行维护时会有很大的不便. 所以

Java继承和访问修饰符

继承 概念:为了提取两个类中公共代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class).继承于父类的类称为子类(sub class). 关键字     extends 特性:     [1] 单根性.在java中,一个类只能有一个直接父类. [2] 传递性.C继承于B,B继承于A,C具有A的特性和行为. [3]之类拥有非私有的属性和方法    关键字   super [1]表示父类关系,仅仅一个关键字,里面没引用.                    

java包,访问修饰符和代码块

包声明: package com.xxx.yyy 需要写在第一行 访问类,导包:import 包名.包名.类名 import java.util.Scanner import com.xxx.yyy.A; 访问修饰符:public,protected,default,private private: 只能在本类中使用 private int a=1; default: 在本类中和同包内使用 int b=2; protected: 在本类,本包和相关子类中使用 protected int c=3;