博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于static 访问权限、继承、多态、内部类结合在一起时的使用方法
阅读量:7099 次
发布时间:2019-06-28

本文共 3049 字,大约阅读时间需要 10 分钟。

本文主要讲的是static与后面这些概念结合在一起时static的用法,当然其他相关的内容也会涉及到。

一、static和访问权限和继承关系结合

想了解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、访问权限、继承、内部类关系结合

想了解内部类相关内容的可以去看这篇博客

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用法和普通外部类一样。

转载地址:http://meeql.baihongyu.com/

你可能感兴趣的文章
圆角 CSS
查看>>
vm12 安装ubuntu15.10详细图文教程 虚拟机安装ubuntu安装 ubuntu更新软件 ubuntu一直卡在下载语言怎么办?...
查看>>
你还有好多未完成的梦,怎么能够停下脚步
查看>>
php自动读取文件夹下所有图片
查看>>
js 获取checkbox选中项目
查看>>
VC6使用技巧
查看>>
文本报告生成工具gawk
查看>>
pdf文档如何转换成txt文档
查看>>
面向对象(OO)设计原则
查看>>
Python 字典的使用
查看>>
DELL32位诊断工具PEDIAGS使用
查看>>
产品经理的麻烦地图
查看>>
如何通过刷百度指数来提高网站的权重
查看>>
轻量级HTTP服务器Nginx(常用配置实例)
查看>>
FAT32文件系统
查看>>
Mysql存储过程分析
查看>>
文件系统权限 -- 学习笔记
查看>>
windows2008域上装oracle10gR2
查看>>
mac终端命令大全介绍(稍加整理)
查看>>
深度技术 GHOST XP SP3 快速装机专业版 V2013.04 [DVD版本]
查看>>