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运算符判断父类变量是否指向了子类对象。