精华内容
下载资源
问答
  • Java关于抽象能否被实例化的问题
    千次阅读
    2021-02-27 12:43:48

    转载:http://blog.csdn.net/zhanzhan0329/article/details/9173419

    首先明确地说:抽象类不能被实例化。

    我对抽象类能否被实例化产生疑问始于我看到一句话说:子类实例化会先实例化父类。而且,自己也知道,抽象类作为父类,其子类是能调用他的属性和已实现方法的。这证明抽象父类在内存是有一定空间的。(百度百科说:实例化其实就是在内存中开放一个空间用于存储新的产物,即对象)

    后来发帖问了,总结得到:子类实例化会先初始化父类,父类初始化并不是又创建一个父类对象,而是把父类中定义的对象相关属性都初始化,因为这些属性子类对象也是拥有的。所以,为了保证子类对象的完整性,要从最底层的父类开始,逐级初始化,所有初始化都完成后才会生成一个完整的子类对象。(也就是要区分开实例化和初始化)

    其实也可以这么理解,抽象类的作用是对一类事物的描述和定义,所以他并不特指某一个东西,因为他是抽象的。(不要像我之前那样去钻牛角尖)

    http://www.cnblogs.com/crt-share/archive/2015/08/29/4769331.html

    抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).但是:接口是不能被实例化的(接口压根就没有构造函数)。

    http://blog.csdn.net/heqiyu34/article/details/6403142

    更多相关内容
  • 主要介绍了Java类继承关系中的初始顺序,结合实例形式详细对比分析了Java继承关系中的初始继承关系中的初始相关原理与操作技巧,需要的朋友可以参考下
  • Java多子类继承同一父类实例化问题

    千次阅读 2022-04-21 15:54:30
    Java(安卓开发)多子类继承同一父类实例化问题

            最近在学安卓的过程中发现了这么一个业务场景,现有一抽象类BaseFragment与三个子类(BluetoothManage、ControlCentral、WifiManage)。

    public abstract class BaseFragment extends Fragment {
        private Context mContext;
    
        protected Handler wifiManageHandler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                handleMsg(msg);
            }
        };
        protected Handler controlCentralHandler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                handleMsg(msg);
            }
        };
    
        //消息处理
        abstract void handleMsg(@Nullable Message msg);
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mContext = getContext();
        }
    }
    

            需要使用Handler进行子类之间的消息传递,由各个子类分别重写handleMsg方法,即各自实现消息处理,比如在WifiManage类中调用父类的controlCentralHandler 发送消息时,实际处理消息的并非ControlCentral 类重写的handleMsg方法,而是指向父类的handleMsg方法,造成一种重写方法失效的假象,这是因为每个子类在初始化时都会对父类进行初始化,即WifiManage类与ControlCentral类所持有的父类对象并非同一实例,因而各自重写的handleMsg方法并不互通。

    public class WifiManage extends BaseFragment {
        public WifiManage() {
            // Required empty public constructor
        }
        public static WifiManage newInstance() {
            WifiManage fragment = new WifiManage();
            return fragment;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_wifi_manage, container, false);
            return v;
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            super.controlCentralHandler.sendEmptyMessage(9);
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)         
        {
            super.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy(); 
    
        }
    
        @Override
        void handleMsg(@Nullable Message msg) {
            
        }
    }
    public class ControlCentral extends BaseFragment {
        public ControlCentral() {
        }
    
        public static ControlCentral newInstance() {
            ControlCentral fragment = new ControlCentral();
            return fragment;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_control_central, container, false);
            return v;
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
         
        }
    
        @Override
        void handleMsg(@Nullable Message msg) {
            if (msg.what == 9 ){
                Log.e("TAG","收到消息了");
            }
        }
    }

            我采用的解决办法是使用单例模式,因为这里不能使不同的子类在实例化时拿到的是同一个父类实例(至少我没有想到解决方法),因而可以将所有handler共同放在一个工具类中,该工具类的设计采用单例模式,即可解决该问题。

    public class HandlerUtils{
        private static HandlerUtils handlerUtils;
        private HandlerCallBack handlerCallBack,wifiManageHandlerCallBack,controlCentralHandlerCallBack,bluetoothManageHandlerCallBack;//处理回调
        private Handler mHandler = new Handler(Looper.getMainLooper()) {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                handlerCallBack.handleMessage(msg);
            }
        };
        protected Handler wifiManageHandler = new Handler(Looper.getMainLooper()){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                wifiManageHandlerCallBack.handleMessage(msg);
            }
        };
    
    
        protected Handler controlCentralHandler = new Handler(Looper.getMainLooper()){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                controlCentralHandlerCallBack.handleMessage(msg);
            }
        };
    
        protected Handler bluetoothManageHandler = new Handler(Looper.getMainLooper()){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                bluetoothManageHandlerCallBack.handleMessage(msg);
            }
        };
    
    
        public static synchronized HandlerUtils getInstance(){
            if (handlerUtils == null){
                handlerUtils = new HandlerUtils();
            }
            return handlerUtils;
        }
    
        public HandlerCallBack getHandlerCallBack() {
            return handlerCallBack;
        }
    
        public void setHandlerCallBack(HandlerCallBack handlerCallBack) {
            this.handlerCallBack = handlerCallBack;
        }
    
        public HandlerCallBack getWifiManageHandlerCallBack() {
            return wifiManageHandlerCallBack;
        }
    
        public void setWifiManageHandlerCallBack(HandlerCallBack wifiManageHandlerCallBack) {
            this.wifiManageHandlerCallBack = wifiManageHandlerCallBack;
        }
    
        public HandlerCallBack getControlCentralHandlerCallBack() {
            return controlCentralHandlerCallBack;
        }
    
        public void setControlCentralHandlerCallBack(HandlerCallBack controlCentralHandlerCallBack) {
            this.controlCentralHandlerCallBack = controlCentralHandlerCallBack;
        }
    
        public HandlerCallBack getBluetoothManageHandlerCallBack() {
            return bluetoothManageHandlerCallBack;
        }
    
        public void setBluetoothManageHandlerCallBack(HandlerCallBack bluetoothManageHandlerCallBack) {
            this.bluetoothManageHandlerCallBack = bluetoothManageHandlerCallBack;
        }
    
        public Handler getHandler() {
            return mHandler;
        }
    
        public Handler getWifiManageHandler() {
            return wifiManageHandler;
        }
    
        public Handler getControlCentralHandler() {
            return controlCentralHandler;
        }
    
        public Handler getBluetoothManageHandler() {
            return bluetoothManageHandler;
        }
    }
    

    展开全文
  • java继承类实例

    2013-12-19 13:39:56
    自己设计的一个程序,展现有继承结构的子类对象的初始过程(包含构造方法、初始值、父类构造方法、父类的初始值的环节)
  • Java中子中子类实例化父类对象

    千次阅读 2019-05-03 18:08:39
    版权声明:博主原创/资料整理,转载请注明出处...1. 子类中,父类实例化父类对象,调用父类中的方法。 2. 子类中,子类实例化父类对象,调用子类中的方法。 3. 子类中,子类实例化子对象,调用子类中的方法。

    版权声明:博主原创/资料整理,转载请注明出处!!

    写一个父类,里面有两个方法,doing ()和talking(),并在doing ()方法中调用talking()方法。代码如下:

    public class Father {
        public void doing (){
            talking();
        }
        public void talking(){
            System.out.println("father is watching TV!");
        }
    }
    

    写一个子类来继承父类,重写doing ()和talking()方法。代码如下:

    public class Son extends Father {
        public static void main(String[] args) {
            Father father = new Father();
            father.doing();
            Son son = new Son();
            son.doing();
        }
        @Override
        public void doing(){
            talking();
        }
        @Override
        public void talking(){
            System.out.println("Son is watching TV!");
        }
    }
    

    此时结果是:

    father is watching TV!
    Son is watching TV!
    

    若子类代码改动如下所示:

    public class Son extends Father {
        public static void main(String[] args) {
            Father father = new Son();
            father.doing();
            Son son = new Son();
            son.doing();
        }
        @Override
        public void doing(){
            talking();
        }
        @Override
        public void talking(){
            System.out.println("Son is watching TV!");
        }
    }
    

    此时结果是:

    Son is watching TV!
    Son is watching TV!
    

    因此可见:
    1. 子类中,父类实例化父类对象,调用父类中的方法。
    2. 子类中,子类实例化父类对象,调用子类中的方法。
    3. 子类中,子类实例化子类对象,调用子类中的方法。

    展开全文
  • java不能实例化类型

    千次阅读 2021-03-04 06:28:06
    8.String对象的两种实例化方式_计算机...当Java虚拟机或者装载器试图实例化某个,而找不到该的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某的某个域,......Jav...

    8.String类对象的两种实例化方式_计算机软件及应用_IT/计算机_专业资料。Java8面向对象编程视频课程 1、 课程名称:String 对象的两种实例化方式 2、知识点 2.1、......

    当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,......

    Java的类一些常识 “1、请解释Java语言的跨平台特性。解析:虽然不知道什么是跨平台也可以使用Java语言进行编程,但是对 于一个Java编程员来说,理解跨平台特性能够更......

    Name D、join 14. 创建线程的最简单的方法就是创建一个实现 Runnable 接口的类在已经创建了实现 Runnable 接口的类以后,你 要在类内部实例化一个 Thread 类的......

    声明与实例化合二为一 ( Java 中的对象只有实例化后,系统才真正 创建出它并为它分配出内存空间): Watch myWatch=new Watch(); //对象的声明与实例化合二为......

    Java 中的类和接口都只支持单重继承。 ( N ) 27. 构造方法没有返回类型, 也不能写 void, 主要用于完成类对象的初始化工作, 一般不能直接编程( Y) 28. ......

    Programming with Types Java是种强类型语言——必须显示规定数据类型 使用基本类型可以大大地改善系统的特性,但是它不具有对象的特性, 也不能满足很多特殊的需要。...

    java练习(类与接口)_IT认证_资格考试/认证_教育专区。1. (分值: 分)Java 语言中创建一个对象使用的关键字为 A: class B: interface C: new D: create 2......

    A. 在 Java 中类只允许单一继承 B. 在 Java 中一个类只能实现一个接口 C. 在 Java 中一个类不能同时继承一个类和实现一个接口 D. 在 Java 中接口只......

    Java 中不能被实例化、 只能被子类继承的是___abstract___ 用英文拼写形写,不要写汉字!)。 4. Java 中不能被子类继承的类是___final___ 类 (请写出英......

    Java常用类习题_计算机软件及应用_IT/计算机_专业资料。java常用类Java 常用类习题一、选择题 1. 下列 String 类的( B)方法返回指定字符串的一部分(选择一项) ......

    值不允许为 null HashTable 的关键字不允许为 null,值允许为 null 3.对于下列代码: String str1="java"; String str2="java"; String str3=new String("......

    在 java 语言中,类 worker 是类 person 的子类,worker...

    C、Hello world D、Hello world Finally executing 2.下面关于 java 中类的说法哪个是不正确的( ) A、类体中只能有变量定义和成员方法的定义,不能有其他语句。...

    ="<

    } } A) 编译异常 B) finally 语句块 和是:43 C) 和是:43 finally 语句块 D) catch 语句块 和是:43 答案:B 15.在 Java 中,关于 HashMap 类的描述,......

    其他的协变问题 数组能够协变而泛型不能协变的另一个后果是, 不能实例化泛型类型的数组 (new List[3]是不合法的),除非类型参数是一个未绑定的通配符......

    下述说法中,错误的是 A.Java 中,方法的重载是指多个方法可以共享同一个名字 B.Java 中,用 abstract 修饰的类称为抽象类,它不能实例化 C.Java 中,接口不......

    [解析] 本题考查Java中的字节输入流。不能被实例化的类是抽象类,题目所给的4个选项中, 由于只有过滤器输入流是抽象类, 因此选项B不能被实例化。 FileInputSt......

    D: 子类不能继承父类的私有属性 32. (分值:0.7 分)在java 语言中...

    展开全文
  • Java的抽象类实例化

    万次阅读 多人点赞 2018-03-19 14:35:37
    Java编程思想》书中定义抽象:“包含抽象方法的”。即如果一个含有抽象方法,则称这个为抽象。 抽象必须在前用abstract关键字修饰。因为抽象中含有无具体实现的方法,所以一般不能用抽象创建...
  • 抽象是由abstract修饰的,它不能被实例化,但是它也... 一个类继承一个抽象,当这个被abstract修饰时,它可以不用继承抽象的抽象方法,但是它不能被实例化,因为有未被完成的方法; 一下是代码实例: 创...
  • Java类的 初始化 和 实例化区别

    千次阅读 2020-09-23 17:13:30
    实例化:是指创建一个对象的过程。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。 1.主要区别 ...
  • 在c++和java中我们会定义很多,但是我们会遇到在对进行new实例化时会遇到“不能实例化抽象”或者“抽象不能实例化”,针对这个问题要首先理解两个内容“抽象”和“实例化” 如果只是想单纯的理解,那么...
  • 继承关系:实例化顺序 * 执行过程为:启动是否为继承关系树中的一个,如果是则先执行启动的所有父类的静态语句块;然后执行启动的静态语句块static{} -> * 执行启动的main函数 -> 创建对象的继承树从...
  • 详解JAVA对象实例化过程

    千次阅读 2020-08-18 10:32:17
    1 对象的实例化过程对象的实例化过程是分成两部分:的加载初始化,对象的初始化要创建的对象实例需要先加载并初始化该,main方法所在的需要先加载和初始化初始化就是执行<clinit>方法,对象实例化是...
  • java抽象类实例化

    千次阅读 2018-10-01 15:51:53
    简单的讲抽象肯定是可以被实例化的,不过不是通过通常的 new方法来实现的,我们都知道抽象必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子的同时父类也必须被实例化,由此可知...
  • JAVA子类继承-子类的实例化过程

    千次阅读 2019-02-26 11:05:14
    一个对象的实例化过程 Person p = new Person(); 1,JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下). 2,在堆内存中开辟空间,分配地址。 3,并在对象...
  • java实例化对象后面添加花括号的理解分析 昨天在看MyBatis官方文档时看到这么一段代码 return new SQL() {{ SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME"); FROM("PERSON P"); if ...
  • Java类的定义及其实例化

    千次阅读 2019-06-14 21:29:55
    是创建对象的模板,创建对象也叫实例化。 下面通过一个简单的例子来理解Java的定义: publicclassDog{ Stringname; intage; voidbark(){// 汪汪叫 System.out.println(“汪汪,不要过来”); } ...
  • Java 继承详解

    千次阅读 2021-02-12 23:53:43
    这里将对JAVA中的继承机制进行讨论。先提一个问题:为什么要使用继承(后面再解答)。1.首先是类继承的写法:继承的关键字:extends格式:public class 类名(子类、派生、超类) extends 类名(父...
  • java抽象到底能不能够实例化

    千次阅读 2020-03-07 16:31:58
    抽象能不能被实例化? 测试 创建一个AbstractFruit抽象 public abstract class AbstractFruit { public AbstractFruit(){ System.out.println("我是Fruit的抽象,我被实例化了"); } public abstract v...
  • java实例化一个抽象的对象

    千次阅读 2019-07-16 16:23:09
    不对啊,根据我的知识一个抽象不能直接实例化一个对象出来,面向对象期末考试的卷子还有专门一道让你改错的题,一般抽象直接实例化对象都是每年必考的错误点。那这个对象从哪实例化,国家分配的吗?先不管,结果...
  • 今天被问到抽象要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了; 随后查了一下明白: 抽象也需要构造函数, 在大多数情况中抽象...
  • 深入理解Java对象的创建过程:的初始化与实例化

    万次阅读 多人点赞 2017-05-18 14:17:45
    Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。...本文试图对JVM执行初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。
  • 详解Java类、对象、实例化

    千次阅读 2015-11-06 11:44:08
    Java是一种面向对象的语言。由于具有面向对象特性的语言,Java支持以下基本概念: 多态性 继承 封装 抽象 对象 ...对象是实例 - 一个可以被定义为描述行为的模板/蓝色印花/指
  • java抽象可以被继承吗?

    千次阅读 2021-03-06 06:39:35
    Java语言中,用abstract 关键字来修饰一个时,这个叫作抽象。...抽象除了不能实例化对象之外,的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通一样。由于抽象不能实例化对象,所...
  • java实例化顺序

    千次阅读 2018-05-20 23:00:13
    1.继承没有的情况单独一个的场景下,初始顺序为依次为静态数据,继承的基类的构造函数,成员变量,被调用的构造函数。其中静态数据只会初始一次。(静态数据包括静态代码块和静态变量,每个的静态数据只会...
  • java 注解的实例化

    千次阅读 2017-01-28 22:17:03
    不过既然是interface,那么就不能直接实例化,但是却可以通过getAnnotation(Class)方法取得注解对象,这说明开发人员或内置注解一定在某个地方有个实现。而这个实现,其实就是JVM在运行时生成的,名称一般遵循$...
  • JAVA继承

    千次阅读 2021-01-20 16:34:40
    1、定义:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 2、目的:代码重用,的重用。 名词:父类(基类,超类)子类(派生)...
  • Q1:php,子类无法访问父类私有属性,子类实例化再赋值后,子类所添加的新成员属性不存在我把涉及到这个问题的知识点,可以和大家分享一下:1.父类humanBeing , 子类student, 实例对象 $m (注意:$m是子类student 的...
  • Java中 接口可以实例化吗?

    千次阅读 2021-03-05 16:40:00
    Java中 接口可以实例化吗? 结论 接口不可以实例化,但是接口变量可以指向该接口实现的对象; 注意点:该接口变量不能使用实现中有、接口中没有的方法; 原因 首先:接口可以看做是特殊的抽象,其方法都是...
  • java 泛型实例化创建对象

    千次阅读 2020-06-01 17:43:35
    //定义泛型抽象 public abstract class TObjectFactory<T> { protected abstract T getTable(); } //继承使用 public class TableFactory<Table,Value> extends TObjectFactory<Table>{ ...
  • 实现的功能的业务是这样的,动态的获取java接口的所有的实现并且排除抽象和接口本身。 代码实现 1.创建接口Animal package com.tcp.executor; public interface Animal { public void say(); } 2.创建抽象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 481,495
精华内容 192,598
关键字:

java实例化继承类

java 订阅