public class Test { // private static String str1="str1"; ///在TestSon中System.out.println(str1);报错 // private String str2="str2";///在TestSon中System.out.println(str2);报错 public static String str1 = "str1"; public String str2 = "str2"; // System.out.println("Test"); 错误 public Test() {//后执行 System.out.println("Test构造方法"); {/非静态代码块先执行 System.out.println("Test非静态代码块"); 正确 public void fun2() { System.out.println("Test.fun2"); public void fun3() { System.out.println("Test.fun3"); public static String getStr1() { return str1; public static void setStr1(String str1) { Test.str1 = str1; public String getStr2() { return str2; public void setStr2(String str2) { this.str2 = str2;
package com.company;
public class TestSon  extends  Test{
    public TestSon() {//后执行
        System.out.println("TestSon构造方法");
    {//非静态代码块先执行
        System.out.println("TestSon非静态代码块");
    public static void main(String[] args) {
        TestSon testSon = new TestSon();
        testSon.funSon1();
        testSon.fun2();子类直接调用父类的public方法,可以把公用类放到父类中,这样子类中无需再定义一遍,
        testSon.fun3();
//    从结果中可以看出:调用某个类的构造方法的时候总是会先执行父类的非静态代码块,然后执行父类的构造方法
//    最后才执行当前类的非静态代码块,然后执行当前类的构造方法,与放置的先后位置无关,
    private void funSon1(){
        System.out.println("super.getStr1():"+super.getStr1());
        System.out.println("super.getStr2():"+super.getStr2());
        System.out.println(str1);在父类中有误get   set方法均可
        System.out.println(str2);//在父类中有误get   set方法均可
        str1="str1Son";
        str2="str2Son";
        System.out.println("修改后"+str1);
        System.out.println("修改后"+str2);
  //  @Override  这个关键字要不要都行
    public void fun3() {重写了父类的代码
        System.out.println("TestSon.fun3");

运行结果如下:

Test非静态代码块
Test构造方法
TestSon非静态代码块
TestSon构造方法
super.getStr1():str1
super.getStr2():str2
修改后str1Son
修改后str2Son
Test.fun2
TestSon.fun3

另外这是我个人开发的App,欢迎下载和好评,V1.5.0版本正在努力开发中......

悟空天气相似应用下载_豌豆荚

深入浅出,保证一看就懂package com.company;/** * Created by liuyazhou on 2016/9/21. */public class Test { // private static String str1="str1"; ///在TestSon中System.out.println(str1);报错 // p     子类可以直接使用父类变量吗?     答案 :可以 (只能是 protected  public 修饰的  成员变量)。     子类继承父类后 在方法里面可以直接使用父类变量。  方法类似     注意:如果不是父类的成员变量就无法获取到。 做了个小实验: 父类:Parent public void method() { super.method(); // 可以直接调父类的成员方法 System.out.println("子类方法执行!"); 我的理解: 父类方法 method() 是成员方法,虽然子类重新覆盖了,但是子类继承
Java面向对象(下)前言一、关键字:static类变量(class Variable)类方法(class method)**类属性、类方法的设计思想**单例 (Singleton)设计模式单例(Singleton)设计模式-饿汉式单例(Singleton)设计模式-懒汉式单例(Singleton)设计模式-应用场景二、理解main方法的语法三、类的成员之四:代码块四、关键字:final五、抽象类与抽象方法六、接口(interface)七、类的成员之五:内部类总结 本文接上一篇 面向对象(中) 封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。 在Java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的态度,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐蔽。1.修饰符 为了对类对象封装,通过对类成员修饰符 施以一定的访问权限,从而实现类中成员的信息隐藏 。 类体定义的格式: class 类名
Java中,父类可以通过向下转型(downcasting)的方式转化为子类。具体实现方式是在子类前加上强制类型转换符号,例如: 子类变量名 = (子类名) 父类变量名; 需要注意的是,如果父类变量实际上指向的是子类对象,那么转换就会成功,否则就会抛出ClassCastException异常。因此,在进行向下转型时,需要先使用instanceof运算符判断父类变量是否指向了子类对象。