山东青岛电脑学校 专业软件工程师培训,软件人才就业实训中心0532-85025005

Java中子类重写父类方法的思想本质

 

Java语言中,在子类中定义与父类同返同名同参的方法将会出现“重写(覆写)”,子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法。

许多初学者也许会被“覆写”一词迷惑,以为覆盖掉了父类的方法,其实这两种方法是同时独立存在的,只是子父类调用该方法的入口不一样,彼此互不干扰。
/*
    需求:设计一个简单的java程序,证明子类重写父类方法的过程
    思路:    1、创建父类对象,通过父类对象调用该方法
            2、创建子类对象,通过父类对象调用该方法
            3、通过子类对象调用该方法
*/
class  RerridingTest
{
    public static void main(String[] args) 
    {
        Father f = new Father();
        f.show();
        Child c = new Child();
        f.show();//创建子类对象并没有“覆盖”掉父类自己的show()方法
        c.show();//子类调用同名方法时直接访问自己定义的方法,并没有访问父类的方法
    }
}

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 20

Java正则表达式匹配,替换,查找,切割

 

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static void main(String[] args) {
        getStrings(); //用正则表达式获取指定字符串内容中的指定内容
        System.out.println("********************");
        replace(); //用正则表达式替换字符串内容
        System.out.println("********************");
        strSplit(); //使用正则表达式切割字符串
        System.out.println("********************");
        strMatch(); //字符串匹配
    }

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 17

java 自动装箱与拆箱

 

这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:

Java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱);

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 17

Java动态代理实现

 

在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。

其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。

Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl是HelloWorld接口的实现,HelloWorldHandler是InvocationHandler接口实现。代码如下:

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 17

Java总结篇系列:java.lang.Object

 从本篇开始,将对Java中各知识点进行一次具体总结,以便对以往的Java知识进行一次回顾,同时在总结的过程中加深对Java的理解。

Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java中最基本的类java.lang.Object开始谈起。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 8

Java中的String不再纠结

 

先分享一下java中string的一些小专题吧,这部分比比较基础,但是也非常的有用。我发现很多面试官像中了邪一样就爱问这个。。string的种种,纠结,希望这篇文章让大家不再纠结。。

      string是我们经常用到的一个类型,其实有时候觉得写程序就是在反复的操作字符串,这是C的特点,在java中,jdk很好的封装了关于字符串的操作。今天主要讲的是三个类String 、StringBuffer 、 StringBuilder .这三个类基本上满足了我们在不同情景下使用字符串的需求。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 21

在2017年最受欢迎的顶级编程语言:

 

在2017年最受欢迎的顶级编程语言:

Java SE;Java EE,Java Web 
Python
PHP
Swift 

Matlab 
Arduino

关于Java

全球化的Web脚本语言。当Web接管我们的宇宙时,使用主要用于Web应用程序的Java也将接管世界。它是一个好的前端工具,可以在所有环境中使用。从添加效果到创建基本功能的游戏,Java是业界最喜欢和最受欢迎的编程语言学习。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 19

Java中静态代码块的用法 static用法详解

 (一)java 静态代码块 静态方法区别
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用
比如main方法就必须是静态的 这是程序入口
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 19

Java基础学习总结——多态(动态绑定)

 一、面向对象最核心的机制——动态绑定,也叫多态

  

1.1.通过下面的例子理解动态绑定,即多态

复制代码
  1package javastudy.summary;  2  3class Animal {  4/**  5     * 声明一个私有的成员变量name。  6*/  7private String name;  8  9/** 10     * 在Animal类自定义的构造方法 11     * @param name 12*/ 13    Animal(String name) { 14this.name = name; 15    } 16 17/** 18     * 在Animal类里面自定义一个方法enjoy 19*/ 20publicvoid enjoy() { 21         System.out.println("动物的叫声……"); 22    } 23} 24 25/** 26 * 子类Cat从父类Animal继承下来,Cat类拥有了Animal类所有的属性和方法。 27 * @author gacl 28 * 29*/ 30class Cat extends Animal { 31/** 32     * 在子类Cat里面定义自己的私有成员变量 33*/ 34private String eyesColor; 35 36/** 37     * 在子类Cat里面定义Cat类的构造方法 38     * @param n 39     * @param c 40*/ 41    Cat(String n, String c) { 42/** 43         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。 44         * 把子类对象里面的父类对象先造出来。 45*/ 46super(n); 47         eyesColor = c; 48    } 49 50/** 51     * 子类Cat对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。 52*/ 53publicvoid enjoy() { 54         System.out.println("我养的猫高兴地叫了一声……"); 55    } 56} 57 58/** 59 * 子类Dog从父类Animal继承下来,Dog类拥有了Animal类所有的属性和方法。 60 * @author gacl 61 * 62*/ 63class Dog extends Animal { 64/** 65     * 在子类Dog里面定义自己的私有成员变量 66*/ 67private String furColor; 68 69/** 70     * 在子类Dog里面定义Dog类的构造方法 71     * @param n 72     * @param c 73*/ 74    Dog(String n, String c) { 75/** 76         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。 77         * 把子类对象里面的父类对象先造出来。 78*/ 79super(n); 80         furColor = c; 81    } 82 83/** 84     * 子类Dog对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。 85*/ 86publicvoid enjoy() { 87         System.out.println("我养的狗高兴地叫了一声……"); 88    } 89} 90 91/** 92 * 子类Bird从父类Animal继承下来,Bird类拥有Animal类所有的属性和方法 93 * @author gacl 94 * 95*/ 96class Bird extends Animal { 97/** 98     * 在子类Bird里面定义Bird类的构造方法 99*/100    Bird() {101/**102         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。103         * 把子类对象里面的父类对象先造出来。104*/105super("bird");106    }107108/**109     * 子类Bird对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。110*/111publicvoid enjoy() {112         System.out.println("我养的鸟高兴地叫了一声……");113    }114}115116/**117 * 定义一个类Lady(女士)118 * @author gacl119 *120*/121class Lady {122/**123     * 定义Lady类的私有成员变量name和pet124*/125private String name;126private Animal pet;127128/**129     * 在Lady类里面定义自己的构造方法Lady(),130     * 这个构造方法有两个参数,分别为String类型的name和Animal类型的pet,131     * 这里的第二个参数设置成Animal类型可以给我们的程序带来最大的灵活性,132     * 因为作为养宠物来说,可以养猫,养狗,养鸟,只要是你喜欢的都可以养,133     * 因此把它设置为父类对象的引用最为灵活。134     * 因为这个Animal类型的参数是父类对象的引用类型,因此当我们传参数的时候,135     * 可以把这个父类的子类对象传过去,即传Dog、Cat和Bird等都可以。136     * @param name137     * @param pet138*/139    Lady(String name, Animal pet) {140this.name = name;141this.pet = pet;142    }143144/**145     * 在Lady类里面自定义一个方法myPetEnjoy()146     * 方法体内是让Lady对象养的宠物自己调用自己的enjoy()方法发出自己的叫声。147*/148publicvoid myPetEnjoy() {149        pet.enjoy();150    }151}152153publicclass TestPolymoph {154publicstaticvoid main(String args[]) {155/**156         * 在堆内存里面new了一只蓝猫对象出来,这个蓝猫对象里面包含有一个父类对象Animal。157*/158         Cat c = new Cat("Catname", "blue");159/**160         * 在堆内存里面new了一只黑狗对象出来,这个黑狗对象里面包含有一个父类对象Animal。161*/162         Dog d = new Dog("Dogname", "black");163/**164         * 在堆内存里面new了一只小鸟对象出来,这个小鸟对象里面包含有一个父类对象Animal。165*/166         Bird b = new Bird();167168/**169         * 在堆内存里面new出来3个小姑娘,名字分别是l1,l2,l3。170         * l1养了一只宠物是c(Cat),l2养了一只宠物是d(Dog),l3养了一只宠物是b(Bird)。171         * 注意:调用Lady类的构造方法时,传递过来的c,d,b是当成Animal来传递的,172         * 因此使用c,d,b这三个引用对象只能访问父类Animal里面的enjoy()方法。173*/174         Lady l1 = new Lady("l1", c);175         Lady l2 = new Lady("l2", d);176         Lady l3 = new Lady("l3", b);177/**178         * 这三个小姑娘都调用myPetEnjoy()方法使自己养的宠物高兴地叫起来。179*/180        l1.myPetEnjoy();181        l2.myPetEnjoy();182        l3.myPetEnjoy();183    }184 }
复制代码

运行结果:

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 17

Android Studio导入github下载的工程

     现在从github上面现在的项目大部分都是Android Studio工程,那么问题来了,从github上面down一个工程下来,怎么导入android studio呢? 

对刚从eclipse转Android Studio的童鞋来说,可能会遇到各种问题。下面方法可以简单快速的将github上的项目导入android studio并运行。 
        首先提一下,Android Studio是基于Gradle来构建项目的,这个与eclipse不同,所以想要熟练掌握Android Studio的用法,最好还是先熟悉Gradle。 
这里只是介绍Android Studio如何导入工程,关于Gradle,可以自行百度。 
    下面介绍Android Studio如何导入project。 
一、安装Android Sudio并新建project
        安装Android Studio后,创建Project,会自动下载Gradle。工程目录结构如下: 
Android Studio导入github下载的工程
二、将github下载的project中的gradle版本替换为本地的版本
    如果直接将project导入进Android Studio的话,会去下载工程相应版本的gradle,此过程非常慢,有时候还会出现各种错误。所以直接使用本地已有的gradle。 
替换方法很简单,只需要将本地创建的工程中的相应文件夹复制到从github下载的project替换之。
Android Studio导入github下载的工程
三、导入project到Android Studio
    File-->new-->import project,会弹出下面对话框,选中github下载下来的project后点击OK即可。我这里使用volley的demo作为示例。 
Android Studio导入github下载的工程
    导入后如下图: 
Android Studio导入github下载的工程
四、替换Module的target SDK
    工程导入后有可能还会编译报错,原因有可能是app Module中gradle配置中target SDK高于你本地SDK的版本。解决办法很简单,打开app/build.gradle文件 
apply plugin: 'com.android.application'
android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.timliu.volleyactivity"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile project(':volleysrc')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
}

    因为我本地的sdk版本最高为21,而此Module的targetSdkVersion为22,所以为编译出错。我们只要将文件稍微改动一下即可,改后的文件如下: 
apply plugin: 'com.android.application'
android {
    compileSdkVersion 21
    buildToolsVersion "20.0.0"   //这里也需修改
   defaultConfig {
        applicationId "com.timliu.volleyactivity"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile project(':volleysrc')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.2'  //这里也需修改
}

    因为app Module依赖volleysrc Library,所以volleysrc/build.gradle文件也做同样的修改。 
五、重新编译
   点击 Android Studio导入github下载的工程按钮对项目重新进行编译。此时编译就不会出错了。编译后,你会发现app目录的图标右下角多了个手机的图标,目录结构如下: 
Android Studio导入github下载的工程
    此时就可以正常运行github下载下来的项目了。 

 

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 41