精华内容
下载资源
问答
  • java 方法中的参数类型是类类型

    千次阅读 2019-08-02 22:03:09
    今天做作业遇到方法中的参数类型是类类型的;有点懵。所以上网查了一些资料,并且和参数类型是基本数据类型的比较了一下。 1方法参数类型是基本数据类型的: public void test(int a) { a=6; System.err.println...

    今天做作业遇到方法中的参数类型是类类型的;有点懵。所以上网查了一些资料,并且和参数类型是基本数据类型的比较了一下。
    1方法参数类型是基本数据类型的:

    public void test(int a) {
    		a=6;
    		System.err.println(a);
    	}
    	public static void main(String[] args) {
    		Student student= new Student();
    		Damo4 t= new Damo4();
    		t.test(10);
    	}
    }
    

    运行结果:
    在这里插入图片描述
    依然是6,说明了如果方法中的形参类型是基本数据类型,那么在方法体中对实参的修改不会影响形参的值
    2 方法中的参数类型是类类型的:
    如果在方法体中修改形参指向修改的内容,则会
    对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;
    说白了,当参数类型是类类型的,其实就是该类的对象,一个地址

    public class Damo4 {
    //类名作为形式参数,要的其实是该类的对象
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Teacher t= new Teacher();
    		//因为teacher类中的形式参数是Student S,所以要创建一个Student对象
    		Student student= new Student();
    		t.test(student);
    	}
    }
    class Student{
    	public void study() {
    		System.out.println("好好学习,天天向上11");
    	}
    }
    class Teacher{
    	public void test(Student s) {
    		s.study();
    	}
    }
    

    以上代码也可以写成一下形式

    在这里插入图片描述

    展开全文
  • 一、C#获取对象的类类型方式 方式1.所有类隐式继承自Object,然而Object类中的GetType()就可以获取当前对象的类,对应的类型 // // 摘要: // 获取当前实例的 System.Type。 // // 返回结果: // 当前实例的...

    一、C#获取对象的类类型方式

    方式1.所有类隐式继承自Object,然而Object类中的GetType()就可以获取当前对象的类,对应的类型

            //
            // 摘要:
            //     获取当前实例的 System.Type。
            //
            // 返回结果:
            //     当前实例的准确运行时类型。
            [SecuritySafeCritical]
            public Type GetType();

    方式2,使用typeof关键词

    System.Type type3 = typeof(Student);

    特别说明:

    1.一个类的类型在进程内是唯一的。

    2.可以用作线程锁使用

    lock (this.GetType())
    {
    
    }
    实例验证:

    public static void TestOne()
    {
        Student stu1 = new Student() { ID = 1 };
        Student stu2 = new Student() { ID = 2 };
    
        //1.获取对象的类的类型
        Type type1 = stu1.GetType();
        Type type2 = stu2.GetType();
        Console.WriteLine(Object.Equals(type1, type2));//输出:True
        Console.WriteLine(type1 == type2); //输出:True
        Console.WriteLine(type1 == typeof(Student));//输出:True
        Console.WriteLine(type1.Name);     //输出:Student
        Console.WriteLine(type1.FullName); //输出:Grammar2._1.TypeTest+Student
    }
    public class Student
    {
        public int ID { get; set; }
    }



    更多:

    C# using 关键字使用整理

    C#Nullable<T>可空的值类型,C#中的?使用整理

    展开全文
  • 标题意思有点绕,说白了就是下面使用方式的选择问题 ...//类类型的引用变量A 去接收对象地址 先附上有关接口的相关知识 知乎 Java 中的接口有什么作用? 博客园 深入理解Java的接口和抽象类 我们...

    标题意思有点绕,说白了就是下面使用方式的选择问题

    //implA 为接口 ClassB为其实现类
    implA A=new ClassB();//接口类型的引用变量A 去接收对象地址
    or
    ClassB A=new ClassB();//类类型的引用变量A 去接收对象地址

    先附上有关接口的相关知识
    知乎 Java 中的接口有什么作用?
    博客园 深入理解Java的接口和抽象类


    我们假设有一个接口A ,和它得实现类B,简化代码如下:

    interface A { //接口A               
     //接口的方法声明必须是 public abstract ,即便不写默认也是
        public void fun();
    
    }
    public class B implements A {
    
        @Override
        public void fun() {
            //your coding
        }
    
    }

    如果我们要使用B类对象,调用B类方法,我们很容易就会习惯的写出

    A demo=new B();

    用接口类型的引用变量demo,去接收实现类B实例化出来的对象地址(这里的=是传递的地址)。为什么不是B demo=new B(); 呢,这样也不会有问题啊?(当然A demo=new A();是不可能的,因为接口是不能用来实例化对象的,但可以用来声明一个接口类型的引用变量)。

    先把结论丢出来吧

    应该优先使用接口而不是类来引用对象,但只有存在适当的接口类型时

    这句话是什么意思呢,
    我们再来看一个例子,代码如下

    public class InterfaceTest {
    
        public static void main(String[] args) {
    
            PetInterface p = new Cat();
            p.talk();
            p.batheSelf();//无法调用 ,报错The method batheSelf() is undefined for the type PetInterface
        }
    
    }
    
    interface PetInterface {                
    
        public void talk();
    
    }
    
    class Dog implements PetInterface {
    
        @Override
        public void talk() {
            System.out.println("Bark!");
        }
    
    }
    
    class Cat implements PetInterface {
    
        @Override
        public void talk() {
            System.out.println("Meow!");
        }
    
        public void batheSelf() {
            System.out.println("Cat bathing");
        }
    
    }

    我们看到,方法batheSelf()仅仅存在实现类中时,若我们仍然使用接口来引用对象时PetInterface p = new Cat()那些仅仅存在实现类中的方法,是无法直接调用的p.batheSelf()无法调用会报错。所以这时使用Cat p = new Cat()类来引用是更好的。

    也就是说,使用接口类去引用对象是有前提条件的——即实现类中全是接口类的方法的实现,没有自己单独的方法。当实现类存在自己的方法时,使用实现类来声明变量。

    在第二版的《Effective Java 》中也有说到这也问题
    Effective Java 2nd Edition, Item 52: Refer to objects by their interfaces

    If appropriate interface types exist, then parameters, return values, 
     and fields should all be declared using interface types. 
    
    If you get into the habit of using interface types,
     your program will be much more flexible. 
    
    It is entirely appropriate to refer to an object by a class if no appropriate interface exists.
    
    
    

    翻译过来大概就是:
    如果存在适当的接口类型,那么参数,返回值和字段都应该使用接口类型。
    如果你养成使用接口类型的习惯,你的程序将更加灵活。 如果没有合适的接口存在,则通过类来引用对象是完全合适的。



    【转型问题】

    继续上面的例子

     public static void main(String[] args) {
    
            PetInterface p = new Cat();//向上转型 Cat->PetInterface 
            p.talk();
            p.batheSelf();//无法调用 ,报错The method batheSelf() is undefined for the type PetInterface
        }

    我们说直接p.batheSelf()会报错,这是因为向上转型的过程中Cat->PetInterface ,对PetInterface 接口造成的唯一效应就是函数的“遗失”而非”获得”(即遗失了实现类自己独有的函数方法batheSelf()),而Cat向上转型至PetInterface可能会窄化其功能,但无论如何不会窄于PetInterface接口功能。
    当然也存在向下转型,

    //p.batheSelf();替换为下面形式
    ((Cat)p).batheSelf();//向下转型,可正常调用执行

    有关向上转型与向下转型的问题见下面的拓展链接

    【参考】
    https://stackoverflow.com/questions/3383726/java-declaring-from-interface-type-instead-of-class
    【扩展】
    重新认识java(五) —- 面向对象之多态(向上转型与向下转型)

    展开全文
  • C++8种常见类类型

    千次阅读 2019-06-11 21:59:24
    C++8种常见类类型 前言 大部分面向对象开发工作中都应用了以下部分或者全部的基本类别的类: 1、具体类(concrete class) 2、抽象类(abstract class) 3、接口类(interface class) 4、节点类(node class) 5、支持类...

    C++8种常见类类型

    前言

    大部分面向对象开发工作中都应用了以下部分或者全部的基本类别的类:
    1、具体类(concrete class)
    2、抽象类(abstract class)
    3、接口类(interface class)
    4、节点类(node class)
    5、支持类(support class)
    6、域类(domain class)
    7、应用类(utility class)
    8、集合和容器类(collection and container class)
    这些类并不是特定的语言结构,而是用于实现逻辑类的技术。

    类类型描述
    具体类独立类;表示一个祖先-后代世系终止的结束类
    抽象类为所有的子类提供布局和蓝图的基准类,不能声明此类的对象;必须派生新的类,对抽象的基本中声明任何虚函数提供定义
    接口类用于修改或者增强另外一个类得接口,为了非面向对象代码和数据,提供面向对象性,而用来封装独立函数
    节点类提供了继承和多态的基础;不包含纯虚函数
    域类创建类在指定域内部模拟部分现实或者实体
    支持 /应用类不管在任何域内,对于不同的应用都非常有用
    集合和容器类其他对象组的一般性容纳器

    具体类

    具体类是作为结束类而设计和实现的,表示祖先-后代世系的终止,所以并不适合相关类的一般系统,每个具体类都不必参考其他类就可以单独理解。
    具体类可以在它的实现中得到优化,因为没有必要去单担心派生类中的功能性;
    所以具体类是线程处理中多线程类的理想候选者,在线程化时,不必考虑派生类中出现的覆盖或者重载重要线程化成员函数。

    抽象类

    抽象类是为所有后代提供蓝图的类,所以实际上,抽象类也就仅仅是一个蓝图罢了,用户也不能声明一个抽象类的对象,为了使用抽象类,用户必须首先从基类中派生出一个新类,而且其为抽象类中声明的所有纯虚函数提供实际定义,默认情况下,抽象类至少需要一个后代,才可以发挥出作用。
    此外,为了让一个类成为抽象类,至少需要一个纯虚函数。

    class A{
    public:
         virtual void lock(void)=0;
         virtual void unlock(void)=0;
     virtual ~A(void);
    }
    

    而类B则从类A中派生出来:

    class B:public A{
    protected:
        pthread_,mutex_t x;
    public:
    B(void);
    ~B(void);
    virtual void lock(void) {pthread_mutex_lock(x);}
    virtual void unlock(void) {pthread_mutex_unlock(x);}
    }
    

    不能直接声明抽象类:
    A MemoryLock; //非法的
    B MemoryLock; //合法的

    接口类

    类用户可用的数据成员和成员函数组成了该类的接口,C++对于类有3种访问策略:
    1、私有(private)
    2、受保护(protected)
    3、公有(public)

    其中:
    1、当数据成员和成员函数为私有的时,它们仅仅只能被中间类的成员函数访问,无法被非该类的成员函数所访问
    2、类的成员函数和数据成员为受保护的时,它们可以被类的中间成员和该类的所有后代所访问,但该类之外的函数无法访问
    3、类可以将成员函数和数据成员声明为公有的,则不管是什么类的成员,都可以访问被定义为public的接口和成员

    例如以下,这可以保护敏感函数或者变量:

    class mutex{
    protected;
        pthread_mutex_lock x;
    public:
        lock() {pthread_mutex_lock(&x);}
        unlock() {pthread_mutex_unlock(&x);}
    };
    

    节点类

    节点类是继承和多态的基础,与抽象类一样,节点类设计用于继承,但是不同的是,节点类不包含纯抽象函数,其可以直接使用。
    节点类提供了可以直接被派生类继承的受保护的数据成员和成员函数,它使用基类的指针允许在后代类中操纵成员函数,用户可以通过多态和继承来特殊化节点类。
    节点类既可以是基类,也可以是派生类。

    域类

    域类是一种创建用来模拟指定域内实体的类,类的意义特定于该域;

    支持/应用类

    这一类和域毫无关系,可以跨域使用,其在不同的应用程序上都非常有用,例如日期类、时间类、计量类等等。

    集合和容器类

    这一类主要充当了其他类或者对象的容纳器对象。

    容器类类型
    StackList
    QueueAssociative Array
    DequeGraph
    SetTree
    MultisetTable

    实现集合和容器类的两个方法:
    1、基于对象途径;
    2、基于模板途径;

    其中基于对象结构非常依赖于多态和继承,产生了高度纵向的集合和容器结构;
    基于模板的结构则十分依赖于C++中模板结构的一般性功能,并且产生集合和容器类的横向结构;

    展开全文
  • 《C++:表达式必须包含类类型

    千次阅读 2019-04-04 14:31:21
    出现“表达式必须包含类类型”这种报错,可能就是声明类对象为基本类型的变量和声明类的对象为指针时调用成员变量的方式使用错误导致的。声明类对象为基本类型的变量时,应该使用直接成员访问运算符(.)来访问;...
  • 表达式必须包含类类型

    万次阅读 2019-02-20 13:36:50
    其中最后一句老是出现 Class表达式必须包含类类型 的错误,后来搜了一下发现改成Class-&gt;Data1=0x745a17a0; 就可以了 两者的区别: 1、A.B则A为对象或者结构体; 2、A-&gt;B则A为指针,-&gt;是成员...
  • java 类类型数组

    千次阅读 2019-08-07 20:51:46
    今天做题,遇到了定义数组类型的,以前都是基本数据类型啊,今天看到这个懵了好久,不过最终还是搞懂了。最后做了一个练习题,一起来看一下吧 题目要求是: // 一个方阵,3排,第一排,从左往右依次是 小红-身高...
  • java获取类类型的方法

    千次阅读 2017-02-06 15:00:29
    * 获取某一个类的类类型的方法 * @author Administrator * */ public class LeiName { public static void main(String[] args) { //方法一、通过类名调用自身隐含的class静态变量,通过class调用类类型 @...
  • 在C++面向对象程序设计中,有时候需要判断某个对象的类类型,那么可以有下列两种方法: 方法1: 采用 typeid()函数进行判断:(缺点:当存在继承,并且子类指针赋值给父类指针时,此时判断的对象类型为父类型,而...
  • java反射以及Class类类型

    千次阅读 多人点赞 2018-12-10 02:46:42
    在运行状态中,对于任意一个,都能知道这个的所有属性和方法, 对于任意一个对象,都能调用它的任意一个方法和属性, 这种动态获取信息,以及动态调用对象的方法的功能称为java语言的反射机制   1.Class...
  • C++面向对象程序设计中如何判断一个对象的类类型  在C++面向对象程序设计中,有时候需要判断某个对象的类类型,那么可以有下列两种方法:  方法1: 采用 typeid()函数进行判断:(缺点:当存在继承,并且子类...
  • 如题,本篇我们介绍下ts中可索引型(数组型)接口 和类类型接口。 可索引型接口用于构建hash散列、堆栈等。 类类型接口就是传统面向对象语言(如java)中的接口,在传统面向对象语言(如java)中极为常见。 06_...
  • 声明:  class dog; //的声明 定义:  class dog{ //的定义 }; 当用实例化一个的对象时,编译器会根据的定义来分配相应的存储空间 。 也就是说,在创建对象前,一定要有完整的定义,这样...
  • * 将一个map组成的list转成实体bean组成的list * @param mapList 存了map对象的list * @param clazz 需要将这些map转成哪个实体对象 * @return */ public &lt;T&gt; List&lt;T&gt; ...
  • 隐式类类型转换

    千次阅读 2010-08-27 20:16:00
    这么解释: 比如有个A的对象a的成员函数的参数应该是A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个...
  • java 判断包装类类型总结

    千次阅读 2017-09-27 10:53:47
    //是字符串类型 }其他包装,用法一致 Byte 、Short、Integer、Long、Float、Double、Character、Boolean、String判断数组和集合 1. 数组(精确)dataArray instanceof String[] dataArray instanceof
  • 不允许使用抽象类类型

    万次阅读 2017-07-20 14:46:00
    C++没有C Sharp中的关键字abstract,但是当一个中有一个或多个纯虚函数的时候,这个就自动成为了抽象,即不可以实例化。 纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,...
  • 运行时获取模板T的类型:Java 反射机制 + 类型擦除机制。
  • 关于“不允许指针指向不完整的类类型”问题分析

    万次阅读 多人点赞 2015-12-22 15:23:32
    你include了吗哈哈哈哈哈哈
  • 看看 include
  • 【Debug】— C++ 表达式必须包含类类型

    万次阅读 多人点赞 2016-09-11 12:20:58
    你以为你定义了一个对象,其实你是声明了一个函数,在编译器看来; 对对象指针采用.的方式访问其成员变量; 1. 情况 1class Test{ public: Test(){ } void foo(){ } };int main(int, char**){ Test t(); // ...
  • 不允许指针指向不完整的类类型

    万次阅读 2016-10-25 22:31:06
    原因:的定义不完整,只给出声明,没有实现,即的头文件引用不足。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,540,538
精华内容 1,816,215
关键字:

类类型