Java知识点总结二---类和成员修饰符
2016-04-12 12:57
204 查看
Java中可用的类修饰符有:public(公有) ,abstract'(抽象) ,final(不可改变),缺省。其中用public修饰类时,表示不管是否是该类所在的包都可访问该类;缺省则表示:只能在包含该类的包中使用该类。abstract表示该类是一个抽象类,只要类中有一个抽象方法,类都必须声明为抽象类。抽象类不可以实例化。final修饰类表示该类不可以被继承。
Java中成员变量和方法的访问权限修饰符有:public ,protected,缺省,private。
其中:
public:所有类中都可访问。
protected:同一包中的所有类,以及不同包的该类的子类可以访问。
缺省:同一包中的所有类可以访问。
private:只在本类中可以被访问。
其他:
static:修饰变量,称为类变量或静态变量。静态变量是和类存在一起的,每个实例共享这个静态变量,在类加载时初始化。
final:被声明为final的变量必须在声明时给定初值,且在以后的引用中只能读取不能更改。修饰方法时,该方法不能被当前子类的方法覆盖。
此外:
访问权限修饰符以及static是不能用来修饰局部变量的,但final可以。
向上转型:
把子类赋值给超类对象时,通过该对象调用方法只能调用父类中含有的方法,属性也是父类中的属性。子类如果覆盖了父类的方法,则执行的是子类中实现的方法,子类若没有覆盖,则执行的是父类中的方法。
好处:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
Java中成员变量和方法的访问权限修饰符有:public ,protected,缺省,private。
其中:
public:所有类中都可访问。
protected:同一包中的所有类,以及不同包的该类的子类可以访问。
缺省:同一包中的所有类可以访问。
private:只在本类中可以被访问。
其他:
static:修饰变量,称为类变量或静态变量。静态变量是和类存在一起的,每个实例共享这个静态变量,在类加载时初始化。
final:被声明为final的变量必须在声明时给定初值,且在以后的引用中只能读取不能更改。修饰方法时,该方法不能被当前子类的方法覆盖。
此外:
访问权限修饰符以及static是不能用来修饰局部变量的,但final可以。
向上转型:
把子类赋值给超类对象时,通过该对象调用方法只能调用父类中含有的方法,属性也是父类中的属性。子类如果覆盖了父类的方法,则执行的是子类中实现的方法,子类若没有覆盖,则执行的是父类中的方法。
好处:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
package com.online.test3; public class Parent { int age=50; String sex="男"; public void say(){ System.out.println("I am your father"); } }
package com.online.test3; public interface Mom { static int a=0; int b=1;//默认为静态 public void work(); }
package com.online.test3; public class Daughter extends Parent implements Mom{ String interest="吃"; @Override public void work() { // TODO Auto-generated method stub System.out.println("work"+"先做饭"+a+" "+b+" "+super.age); } public void study(){ System.out.println("晚上我要敲代码"); } public void say(){ System.out.println("I am your daughter"); } /** * 子类转换赋值给父类对象。通过该对象调用方法只能调用父类中含有的方法,属性也是父类中的属性。 * * 子类如果覆盖了父类的方法,则执行的是子类中实现的方法,子类若没有覆盖,则执行的是父类中的方法 * @param args */ public static void main(String[] args){ Mom m=new Daughter(); //把子类转成接口 m.work();//执行的是子类中的该方法 //m.say();/这是错误的,无法调用 //m.study();//这是错误的,无法调用 //m.interest//这是错误的,无法调用 Parent p=new Daughter();//把Daughter类转换成Parent,只能调用parent中含有的方法 p.say();//执行的是子类中的该方法 int age=p.age; String sex1=p.sex; //p.work();这是错误的,无法调用 //p.study();这是错误的,无法调用 Daughter d=new Daughter();//可以调用子类和从父类继承到的方法 int dage=d.age; String in=d.interest; int a1=a; d.say(); d.work(); d.study(); } }执行结果:
work先做饭0 1 50 I am your daughter I am your daughter work先做饭0 1 50 晚上我要敲代码
相关文章推荐
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
- Struts2-Value Stack浅析
- Struts详解
- Struts2中访问Servlet API的几种方式
- Java中public int length()的用法
- 在父类转换到子类时发生java.lang.ClassCastException
- Myeclipse创建新项目
- Java学习记录
- java 进程间通讯的有几种方法?
- Java源码解析-hashmap
- maven导入项目时把jdk变成1.8的解决办法
- eclipse下android项目解决方法数id超过65535
- 工具相关——用Eclipse的SVN插件管理一般目录
- java 堆 栈 方法区的简单分析
- Java入门 第二季第一章 类和对象
- 关于Struts2的namespace的一些总结
- cxf中no-Spring,webService传值为null解决办法
- eclipse中的web-inf下没有web.xml
- Serializable实现java对象持久化以及transient关键字
- Java虚拟机学习 - 内存调优