⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java4.txt

📁 达内IT培训Core Java全部笔记 是学习Java编程的好东西
💻 TXT
📖 第 1 页 / 共 2 页
字号:
重写和多态没有必然联系,但二者都是基于继承的前提下的两个不同概念重写的好处:父类不满足子类的需求,或者对于子类来说是错误的方法会被重写屏蔽掉,保证方法调用的时候的对于子类的正确性多态:类多态:父类变量指向子类对象,发生类多态1.只能使用父类中定义的属性/方法,不能使用子类中定义的,除非进行类型转换2.重写的方法可以调用,但是实际调用的是子类的重写后的方法,覆盖掉了父类中的方法3.如果没有继承,就没有重写,如果在父类中把方法设为 private ,那showName()方法就不能重写,也就会报错,如果想要使用子类的showName()方法,可以把	@Override 去掉,使子类中的showName()成为一个新方法Chapter 6Java 语言高级特性static 关键字静态可以用于方法,属性,语句,内部类只要加了static 就会提升到类级别,也就是类相关static 属性/方法依赖类,不依赖对象,可以使用类名.调用(可以使用对象名调用,但最好使用类名调用,使可读性增强,知道是调用static )1.static 方法当中只允许操作static 属性,不能操作非static 属性2.static 属性中可以在任意方法中使用3.this super 不能在static 方法中出现--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class TestCount {	private static int count1 = 0;	private int count2 = 0;	static{							//static修饰语句块,在类加载的时候调用		System.out.println("static");	}	public TestCount(){		count1++;		count2++;	}	public static void test(){		count1 = 2;		//可以给静态属性赋值		//count2 = 3;	静态方法中只能有静态属性		//this.count	静态方法中不能有this和super关键字	}	public static void main(String[] args) {		System.out.println("begin");		TestCount tc1 = new TestCount();		System.out.println("end");		TestCount tc2 = new TestCount();		System.out.println(tc1.count2);		System.out.println(tc2.count1);	//应该用TestCount.count1	}}输出结果:staticbegintestcountendtestcount12--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class Test {	/**	 * @param args	 */	public static void main(String[] args) {		System.out.println("begin");		TestCount tc1 = new TestCount();		System.out.println("end");		TestCount tc2 = new TestCount();	}}输出结果:beginstatictestcountendtestcount--------------------------------------------------------------------------------------上面个2个例子中说明,想要执行main方法一定要先加载本类,所以第一个TestCount中先执行static 语句块的内容,所以输出结果static 在第一个而在Test中的main方法是在其他类中调用TestCount类,所以在new 的时候才会显示 static ,所以static 会在第二个出现--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class Test {	public static void main(String[] args) {		TestCount tc1;	//声明的时候不加载类		//TestCount.test();		类名. 静态方法 的时候会加载类,所以如果写这句这里会显示static		System.out.println("begin");		tc1 = new TestCount();	//只有在new的时候才会加载类,这时候才会显示static		System.out.println("end");		TestCount tc2 = new TestCount();	}}--------------------------------------------------------------------------------------声明的时候不加载类,只有在用new 或 类名.静态方法 的时候才会加载类,这时候会把静态成员函数填入池中把.class 文件加载到内存中称为类加载,由CLASSPATH中找类文件--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class Person {	static{		System.out.println("person static");	}	{		System.out.println("person not static");	}	public Person(){		System.out.println("person");	}}--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class Student extends Person{	static{		System.out.println("student static");	}	{		System.out.println("student not static");	}	public Student(){		System.out.println("student");	}	public static void main(String[] args) {		new Student();			//加载子类的时候一定会先加载父类	}}输出结果:person staticstudent staticperson not staticpersonstudent not staticstudent--------------------------------------------------------------------------------------上面的例子说明,加载子类的时候一定会先加载父类,所以在加载的时候会先显示person static ,然后再加载子类,会显示student static,再从父类中的按语句块,构造的顺序执行,最后执行子类中的语句块,构造由父到子的过程是特化,由子到父的过程叫泛化。单例设计模式:--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class Singleton {	//单例		private static Singleton sin;// = new Singleton();  饿汉式生成,//由于是静态的,所以可以保证在类加载的时候运行一次		private Singleton(){}		public static Singleton getInstance(){	//直接返回sin			if(sin==null){				sin = new Singleton();//懒汉式生成,节省内存,在需要的时候再生成			}			return sin;		}}--------------------------------------------------------------------------------------package com.tarena.day04.sta;public class TestSingleton {	public static void main(String[] args) {		Singleton s1 = Singleton.getInstance();		Singleton s2 = Singleton.getInstance();		System.out.println(s1==s2); 		//true	}}--------------------------------------------------------------------------------------final 可用于类,方法,属性1.final 的类是无法继承的2.final 方法无法重写/覆盖3.final 只能赋值一次--------------------------------------------------------------------------------------package com.tarena.day04.fin;public class TestFinal {	private final int t;	//只用final不一定是常量,只是不能对它二次赋值	private final Person p = new Person();//final变量(p)的方法和属性(age)不一定是final的	public TestFinal(){				t = (int)(Math.random()*86);		p.setAge(t);		p.setAge(t+1);		System.out.println(t);	}		//final的变量必须显式赋值,位置可以是声明/构造/语句块	public void set(int i){		//t = i;	//同一对象方法可以被多次调用,所以不能在这里给一个final变量赋值	}	public static void main(String[] args) {		TestFinal tf1 = new TestFinal();		TestFinal tf2 = new TestFinal();	}}class Person{	private int age;	public void setAge(int age){		this.age = age;	}	public int getAge(){		return age;	}	}--------------------------------------------------------------------------------------作业:1.复习和总结概念2.把所有代码看懂,自己敲出来.3.写一个日期类,要求有年月日。要能区分闰年,要求按照封装等概念来做,要求写两个构造,一个无参,一个带三个参数int4.写一个教室类,有学生/老师/网管学生有多人,要求:学生人数在开班的时候要确定,不可改变,老师是所有教室共享的,管理员要求常量(类/对象/属性/方法/构造/封装/继承/多态/final/static)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -