关于static 访问权限、继承、多态、内部类结合在一起时的使用方法
2017-08-31 11:04
656 查看
本文主要讲的是static与后面这些概念结合在一起时static的用法,当然其他相关的内容也会涉及到。
这三者结合时就是简单的把各自的使用方法放一起,结合代码解释
编译通过,运行结果:
test1:1
test1:1
test1:1
static成员正常被子类继承。且子类可以通过 子类名.父类静态成员 来调用父类的静态成员变量。从用法上来说就是相当于子类也有了父类的静态成员。
如果在pr()方法加上private会怎样呢
注释部分都是编译不通过的。
所以说明加上private的方法子类都是无法继承的,无论是不是static,用private修饰的成员变量只能在本类使用。不管是不是静态。
输出结果:
ChildrenPr3
ParentStaticPr3
结论:非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果; 静态方法属于类,是不能被重写,故而也不能实现多态。
静态方法不能实现多态,Parent p2 = new Children(); p2.pr3(); p2.staticPr3();强行这样写会有警告,并且staticPr3调用的是父类的方法。
从上面Children的staticPr3方法编译不通过可知普通内部类不能有静态成员变量,只有静态内部类才能有静态成员变量。 内部类中结合权限修饰符、继承、多态的static用法和普通外部类一样。
一、static和访问权限和继承关系结合
想了解Java访问权限的内容可以去看这篇博客Java的权限修饰符的区别和用法总结这三者结合时就是简单的把各自的使用方法放一起,结合代码解释
public class Test { public static void main(String[] args){ Children.pr(); Parent.pr(); Parent p = new Parent(); p.pr(); } } class Parent{ static int i=1; static void pr(){ System.out.println("pr1:"+i); } } class Children extends Parent{ public void t(){ pr(); } }
编译通过,运行结果:
test1:1
test1:1
test1:1
static成员正常被子类继承。且子类可以通过 子类名.父类静态成员 来调用父类的静态成员变量。从用法上来说就是相当于子类也有了父类的静态成员。
如果在pr()方法加上private会怎样呢
public class Test { public static void main(String[] args){ // Children.pr();//编译不通过 // Parent.pr();//编译不通过 Parent p = new Parent(); // p.pr();//编译不通过 // p.pr2();//编译不通过 } } class Parent{ static int i=1; private static void pr(){ System.out.println("pr1:"+i); } private void pr2(){ System.out.println("pr1:"+i); } } class Children extends Parent{ public void t(){ // pr();//编译不通过 // pr2();//编译不通过 } }
注释部分都是编译不通过的。
所以说明加上private的方法子类都是无法继承的,无论是不是static,用private修饰的成员变量只能在本类使用。不管是不是静态。
二、static、访问权限、继承、多态关系的结合
加上多态的用法之后就有点不同了public class Test { public static void main(String[] args){ // Children.pr();//编译不通过 // Parent.pr();//编译不通过 Parent p = new Parent(); // p.pr();//编译不通过 // p.pr2();//编译不通过 Parent p2 = new Children(); // p2.pr2();//编译不通过 p2.pr3(); p2.staticPr3();//警告 } } class Parent{ static int i=1; private static void pr(){ System.out.println("pr:"+i); } private void pr2(){ System.out.println("pr2:"+i); } static void staticPr3(){ System.out.println("ParentStaticPr3"); } void pr3(){ System.out.println("ParentPr3"); } } class Children extends Parent{ public void t(){ // pr();//编译不通过 // pr2();//编译不通过 } static void staticPr3(){ System.out.println("ChildrenStaticPr3"); } void pr3(){ System.out.println("ChildrenPr3"); } }
输出结果:
ChildrenPr3
ParentStaticPr3
结论:非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果; 静态方法属于类,是不能被重写,故而也不能实现多态。
静态方法不能实现多态,Parent p2 = new Children(); p2.pr3(); p2.staticPr3();强行这样写会有警告,并且staticPr3调用的是父类的方法。
三、static、访问权限、继承、内部类关系结合
想了解内部类相关内容的可以去看这篇博客 java内部类总结public class Test { static class Parent{ static int i=1; private static void pr(){ System.out.println("pr:"+i); } private void pr2(){ System.out.println("pr2:"+i); } static void staticPr3(){ System.out.println("ParentStaticPr3"); } void pr3(){ System.out.println("ParentPr3"); } } class Children extends Parent{ public void t(){ } static void staticPr3(){//编译不通过 System.out.println("ChildrenStaticPr3"); } void pr3(){ System.out.println("ChildrenPr3"); } } }
从上面Children的staticPr3方法编译不通过可知普通内部类不能有静态成员变量,只有静态内部类才能有静态成员变量。 内部类中结合权限修饰符、继承、多态的static用法和普通外部类一样。
相关文章推荐
- 关于C++中私有继承后虚函数的访问权限与私有继承后多态的问题
- 面向对象,类的组合关系,继承,实现,方法重写,方法重载,this的使用,抽象方法和抽象类的比较,父类构造方法存在的意义,多态的是用和解析,各种访问修饰符
- Java继承多态中的方法访问权限控制
- 关于“计算机无法访问,您可能没有权限使用网络资源....”的解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- 关于java继承访问权限(自己的小笔记)
- 无法访问,您可能没有权限使用网络资源的解决方法
- 第05章 CORE C++_对象的创建和使用_继承_多态_析构_xxx_cast_友元_只读成员_静态成员_多重继承_虚继承_内部类
- 无法访问.您可能没有权限使用网络资源.局域网无法访问共享,局域网无法访问打印机的一些方法
- php开发过程中关于继承的使用方法分享
- 关于基类派生类的继承访问权限
- 学习C#的一些笔记(关于继承与多态,static关键字)
- 关于使用ASP.NE 1.1发送电子邮件时出现的 未能访问“CDO.Message”对象 的错误的解决方法
- 关于static_cast dynamic_cast reinterpret_cast的使用方法和场合
- 后台页面访问权限:页面基类&内置票据认证 使用方法
- [转] "计算机无法访问,您可能没有权限使用网络资源.请与这台服务器的管理员联系以查明您是否有访问权限" 解决方法
- CSDN上的一个问题贴(关于内部类在外部类静态方法中使用问题)
- 后台页面访问权限:页面基类&内置票据认证 使用方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- 关于方法CEikonEnv::Static()方法和宏iEikonEnv的使用区别。