精华内容
下载资源
问答
  • 如果一个构造函数是public的话,那么我们利用反射是可以很容易的创建一个对象实例,但是如果我们的构造函数是被private修饰的话,那么反射还能创建一个对象吗?答案是可以的,注意一点就可以拿到了,下面一起来看...

    如果一个构造函数是public的话,那么我们利用反射是可以很容易的创建一个对象实例,但是如果我们的构造函数是被private修饰的话,那么用反射还能创建一个对象吗?答案是可以的,注意一点就可以拿到了,下面一起来看看。

    首先我们来创建一个类:

    public class PrivateTest {
    
        private PrivateTest() {
        }
    
        public void output() {
            System.out.print("string is : me" );
        }
    }

    这个类的构造函数是private修饰的。

    然后我们先用newInstance方法试试,看能不能创建一个对象。

    public static void main(String[] args) {
        try {
            Class clz = Class.forName("reflectDemo.PrivateTest");
            Object obj = clz.newInstance();
            if (obj instanceof PrivateTest){
                PrivateTest test = (PrivateTest) obj;
                test.output();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    运行程序会发现报错:
    这里写图片描述

    可以看到这种方式行不通,那么我们用Constructor来试试看行不行呢

    public static void main(String[] args) {
        try {
            Class clz = Class.forName("reflectDemo.PrivateTest");
            Constructor constructor = clz.getDeclaredConstructor();
            Object obj = constructor.newInstance();
            if (obj instanceof PrivateTest){
                PrivateTest test = (PrivateTest) obj;
                test.output();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    运行程序同样也会报错:
    这里写图片描述

    可以看到错误的问题都是一样的,那就是我们不能访问private修饰的构造函数,那么怎么解决这个问题呢?

    解决方法还是使用Constructor,不过需要给代码多加一行代码:

    constructor.setAccessible(true);

    加上这行代码的含义表示我们的constructor对象能够访问我们的private修饰的构造函数,运行程序看看变化:

    这里写图片描述

    可以看到我们的程序已经能够通过反射的形式创建一个被private修饰的构造函数对象并且能够正确的调用对象里的方法,所以利用这种方法可以解决我们的问题,小知识点希望对大家有帮助!

    展开全文
  • private给谁

    2018-01-19 19:31:53
    所以我们java里面也...protected和private可以修饰内部 java建议默认修饰吗?-----不建议 方法-----------------public 变量--------------private和protected  子类的变量--------------private  


    所以我们java里面也建议每个类都有public

    建议一个文件中只做一个类,

    protected和private可以修饰内部类

    java建议默认修饰吗?-----不建议



    方法-----------------public

    变量--------------private和protected

            子类的变量--------------private

             父类的变量-------------protected (为什么父类的变量不用private?因为父类的变量用了private,那他的子类都用不了)

    private只能本类用啊


    展开全文
  • 我们经常着四种修饰符去修饰变量、方法和,但是这四种的作用域都一样吗? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具体的作用域是哪些范围。先对其四种进行说明再通过案例...

    一、private、protected、public和default的作用域

    我们经常用着四种修饰符去修饰变量、方法和类,但是这四种的作用域都一样吗? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具体的作用域是哪些范围。先对其四种进行说明再通过案例进行证明:

    public:具有最大访问权限。 可以被同一项目下的任何类所调用,一般用于对外的情况。

    protected:与public不同的是不同包下的类是不能使用的,但是其子孙类除外。所以我认为这是特意为子类设计的。

    default:它是针对本包设计的,它所修饰的在本包下的其他类都访问。

    private:只为类本身提供。是一种封装的体现。

     

    二、案例

    案例:先声明一个类,可以供子类继承。

    package com.yuanfy.test.scope1;
    /**
     * @Description: 父类,其中有四种修饰符所修饰的变量和方法
     * @author yuanfy
     * @date 2017年12月8日 下午5:04:35 
     */
    public class Person {
        private String name;
        int age;
        protected String color;
        
        public Person(){}
        
        public Person(String name, int age, String color) {
            super();
            this.name = name;
            this.age = age;
            this.color = color;
        }
    
        public void say(){
            System.out.println(this.name + " say: I am " + this.color + " Person");
        }
    }

    测试1:同包下面测试 四种作用域,从中可以看出private不支持在同包下的其他类使用,其他三种是支持在同包下其他类调用的。

    package com.yuanfy.test.scope1;
    /**
     * @Description: 同包下面测试 四种作用域
     * @author yuanfy
     * @date 2017年12月8日 下午5:11:12 
     */
    public class PersonTest {
        public static void main(String[] args) {
            Person person = new Person("James", 32, "red");
            System.out.println("name:" + person.name);//编译报错,所以private修饰的 是不能在同包下的其他类访问
            System.out.println("age:" + person.age);// default
            System.out.println("color:" + person.color);//protected
            person.say();//public
        }
    }

     测试2:在子孙类下测试 四种作用域(不同包的情况下,同包相当于测试1),从下面测试代码中可以看出:private和default所修饰的,不支持在子孙类下调用的,其他两种是支持在子孙类下调用的。

     1 package com.yuanfy.test.scope2;
     2 import com.yuanfy.test.scope1.Person;
     3 /**
     4  * @Description: 在子孙类下测试 四种作用域
     5  * @author yuanfy
     6  * @date 2017年12月8日 下午5:24:30 
     7  */
     8 public class BlackPerson extends Person{
     9 
    10     public BlackPerson(String name, int age) {
    11         super(name, age, "black");
    12     }
    13     public static void main(String[] args) {
    14         BlackPerson person = new BlackPerson("James", 32);
    15         
    16         System.out.println("name:" + person.name);//private 编译报错,所以private修饰的 是不能在不同包下的子孙类访问
    17         System.out.println("age:" + person.age);// default  编译报错,所以default修饰的 是不能在不同包下的子孙类访问
    18         System.out.println("color:" + person.color);//protected 
    19         person.say();//public
    20     }
    21 }

    测试3:不同包下面测试 四种作用域,从下面测试案例中可以看到只有public才支持不同包下的其他类(子孙类除外)调用,其他三种都不支持。

     1 package com.yuanfy.test.scope2;
     2 
     3 import com.yuanfy.test.scope1.Person;
     4 
     5 /**
     6  * @Description: 不同包下面测试 四种作用域
     7  * @author yuanfy
     8  * @date 2017年12月8日 下午5:11:12 
     9  */
    10 public class PersonTest2 {
    11     public static void main(String[] args) {
    12         Person person = new Person("James", 32, "red");
    13         
    14         System.out.println("name:" + person.name);//private 编译报错,所以private修饰的 是不能在其他包下的任何类访问(除了自身)
    15         System.out.println("age:" + person.age);// default 编译报错,所以default修饰的  是不能在其他包下访问的。
    16         System.out.println("color:" + person.color);//protected 编译报错,所以default修饰的  是不能在其他包下访问的。
    17         person.say();//public
    18     }
    19 }

    所以经过上面案例分析可以得出他们分别对应有效的作用域,如下表:

    作用域 当前类 同一包内 子孙类(不同包) 其他包
    public
    protected ×
    default × ×
    private × × ×
     

     

    转载于:https://www.cnblogs.com/yuanfy008/p/8006604.html

    展开全文
  • 抽象中变量的不能 abstract 修饰(所以没有抽象变量这一说法),接口中常量(接口没有变量)、方法的默认修饰符位 public abstract,然而你思考过接口中可以定义 protect abstract、default abstract、private ...

    引入

    今天复习抽象类和接口,抽象类中变量的不能用 abstract 修饰(所以没有抽象变量这一说法),接口中常量(接口没有变量)、方法的默认修饰符位 public abstract,然而你思考过接口中可以定义 protect abstract、default abstract、private abstract 定义常量或者方法吗?

    答案

    如果突然有一天有一个面试题报错,你知道哪错了吗?
    
    interface Test2 {
    
        protected static final String NAME = "KLZ";
    
        public abstract void name();
    
    }
    
    • 接口中常量、方法的修饰符必须是 pubic static final 和 public abstract;
    • 通常我们可以不用写修饰符
    public interface Test {
        //不能定义变量
    //    String name;
    //    abstract String name;
    
        //只能定义常量,但是必须是公共的(public)静态(static)常量(final),三个修饰符可以交换位置
    //    final String name;
    //    protected static final String NAME = "klz";
        public static final String NAME = "klz";
        final public static int age = 21;
    
    
        // 接口中只能定义抽象方法(没有方法体的方法),默认的修饰符是 public abstract
        public abstract void name();
    
    //    protected abstract void age();
    
    //    default abstract void age();
    }
    
    展开全文
  • Java的内部和匿名 , 您了解过吗?

    千次阅读 多人点赞 2020-07-23 08:35:30
    内部类可以是静态的,通常 protected 或者 private 关键字修饰,外部只能使用public或者系统默认权限。 如果你对Java的访问权限不熟悉,可以看一下我这篇文章。 内部主要有成员内部、局部内部、静态内部...
  • 抽象和接口的区别

    2019-01-20 19:22:05
    abstract 当子类中有一些共有的但是细节不同的行为的时候,可以对这些行为进行抽取,将这些行为抽取到父类中以抽象方法的形式展现。...抽象方法不可以用private修饰 抽象方法可以用默认权限修饰吗?...
  • abstract 当子类中有一些共有的但是细节不同的行为的时候,可以对这些行为进行抽取,将这些行为抽取到父类中以抽象方法的形式展现。...抽象方法不可以用private修饰 抽象方法可以用默认权限修饰吗?...
  • (3)内部类可以直接访问外部的字段和方法,即使是用private修饰的,相反的,外部不能直接访问内部的成员 内部的划分 (1)成员内部 成员内部就是在外部的里面还有一个被称为成员内部,成员内部类可以...
  • 文章目录1、c++ 三大特性2、与函数访问修饰符及继承虚函数(virtual)构造函数可以用虚函数吗析构函数需要使用虚函数纯虚函数3、多态4、数据抽象 1、c++ 三大特性 封装:将某些东西隐藏起来,以特殊方式访问,...
  • 封闭性即对中的域变量进行封闭操作,即用private修饰他们,如此一来其他则不能对该变量访问。这样我们就将这些变量封闭在了内部,这样就提高了数据的安全性,当我们想要操作这些域变量怎么办呢?    ...
  • java 面向对象进阶

    2020-11-22 20:37:49
    我们看用private修饰后的程序: 在Text中用private修饰后的name和age属性,我们发现在main方法中就调用不了name和age了。程序会报错。这这种情况下我们就需要调用set方法为其赋值: 打印内容为: 我们会看到...
  • 当父类中的某个方法被所有子类进行不同程度的重写,这个方法的方法体没有任何意义,那么我们可以把方法体去掉,abstract修饰,使其变为抽象方法,抽象方法所在的就要编程抽象 注意 抽象方法一定要重写,支持...
  • 其实上面的功能要求方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:所以,使用instanceof在绝大多数情况下并不是...
  • 20210108-practice

    2021-01-08 21:12:05
    练习题: 一、简答题 1. abstract 和final,this,static,private能一起吗? abstract 和 final: ...static修饰的方法是属于的,它存在于静态区中,static修饰的方法可以直接通过类名调用; ​ abstract修饰
  • 1、成员变量、变量区别 2、静态代码块、构造代码块、构造函数执行顺序 ...抽象关键字abstract可以和final、static、平private一起吗? 6、接口中的成员的修饰符 7、接口与抽象的区别与联系 8、多
  • 李洪强经典面试题28

    2019-10-04 23:47:36
    有时可以用分类和协议来代替多继承 2.Object-C有私有方法吗?私有变量呢?
 1>OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2>可以使用扩展(Extension)来...
  • OC常见面试题四

    2015-09-22 19:18:00
    有时可以用分类和协议来代替多继承 Object-C有私有方法吗?私有变量呢? OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 可以使用扩展(Extension)来增加私有方法和私有变量 ...
  • iOS知识点(6)

    2016-01-06 18:45:05
    Object-C有多继承吗?...OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法可以使用扩展(Extension)来增加私有方法和私有变量 关键字const什么含义? const int a; int cons
  • iOS笔试题04

    2019-09-26 23:20:19
    有时可以用分类category和协议protocol来代替多继承 2.Object-C有私有方法吗?私有变量呢?
 1>OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2>可以使用扩展(Extension)/...
  • iOS面试题四

    2016-02-14 22:23:02
    2> 有时可以用分类和协议来代替多继承2. Object-C有私有方法吗?私有变量呢? 1> OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以使用扩展(Extension)来增加私有方法和私有...
  • IOS面试题(精华篇)

    2019-10-04 14:03:30
    有时可以用分类和协议来代替多继承 2. Object-C有私有方法吗?私有变量呢?
 1> OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以直接在.m文件中(...
  • iOS 笔试题04~[有答案]

    2017-06-11 16:35:54
    2> 有时可以用分类和协议来代替多继承   2.Object-C有私有方法吗?私有变量呢?
 1> OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以使用扩展
  • IOS笔试题目一

    2015-11-03 16:57:00
    有时可以用分类和协议来代替多继承 Object-C有私有方法吗?私有变量呢? OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 可以直接在.m文件中(比如扩展)声明和实现方法,对编译器来...
  • iOS面试题大全100-115

    2015-10-19 10:05:00
    100. Object-C有多继承吗?... 有时可以用分类和协议来代替多继承 101. Object-C有私有方法吗?私有变量呢?
 1> OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以使...
  • 面试笔试精华(四) ... 有时可以用分类和协议来代替多继承 2. Object-C有私有方法吗?私有变量呢?
 1> OC没有类似@private修饰词来修饰方法,只要写在.h文件中,就是公共方法 2> 可以直接在...
  • JAVA反射知识点精解!

    2014-03-19 13:55:12
    JAVA反射可以获取所有已经定义的方法和字段,但是我尝试在使用getMethods却老是...原来,如果你想获取某一个类private的方法和未使用修饰符的方法,应该getDeclaredMethods() 例子: class Hello{ private int a;
  • private修饰的方法是否可以被子覆盖 覆盖和重载有什么区别 进程跟线程的区别 Java中创建线程有几种方式 a. 反思:讲完三种方式之后,应该深入对比各种方式的优劣性,拖时间,

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

可以用private修饰类吗