public class demo1 { public static void main(String[] args) { // TODO Auto-generated method stub tell("Tom", 2, 3); tell("Tik", 1, 2, 3); } public static void tell(String name, int i, int j){ System.out.println(name + (i + j)); } public static void tell(String name, int i, int j, int k){ System.out.println(name + (i+j+k)); } }
public class demo1 { public static void main(String[] args) { // TODO Auto-generated method stub tell("Tom", 2, 3); tell("Tik", 1, 2, 3); } public static void tell(String name, int i, int j){ System.out.println(name + (i + j)); } // 此处函数返回值不同,不构成重载!!!!!!!!!!!!!!!!!!!!! // public int tell(){ // // } // public String tell(){ // // } }
package com.hanqi.demo1; class SmallPerson{ private int age; private String name; private int id; public SmallPerson(int age, String name, int id) { this.age = age; this.name =name; this.setId(id); } public SmallPerson(String name, int id) { this.age = 20; this.name =name; this.setId(id); } public SmallPerson(int id) { this.age = 30; this.name = "王大锤"; this.setId(id); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } } public class test06 { public static void main(String[] args) { // TODO 自动生成的方法存根 SmallPerson s = new SmallPerson(21, "hq", 4009); System.out.println(s.getId()+s.getName()+s.getAge()); SmallPerson s1 = new SmallPerson("wahaha", 4008); System.out.println(s1.getId()+s1.getName()+s1.getAge()); SmallPerson s2 = new SmallPerson(4007); System.out.println(s2.getId()+s2.getName()+s2.getAge()); } } ////// 4009hq21 4008wahaha20 4007王大锤30
1.被子类重写的方法不能拥有比父类方法更加严格的访问权限
2.访问权限:private<default<public
3.一半子类与父类方法权限设置为相同即可
package com.hanqi.demo1; class A{ public void tell() { System.out.println("我是tell方法"); } } class B{ public void tell() { System.out.println("重写了tell方法"); } } public class test05 { public static void main(String[] args) { // TODO 自动生成的方法存根 B b = new B(); b.tell(); } } ///////////////////////////////////////////////////////////////////////////////////////////////////// 重写了tell方法
super
关键字,如下package com.hanqi.demo1; class A{ public void tell() { System.out.println("我是tell方法"); } } class B extends A{ public void tell() { super.tell(); System.out.println("重写了tell方法"); } } public class test05 { public static void main(String[] args) { // TODO 自动生成的方法存根 B b = new B(); b.tell(); } } ///////////////////////////////////////////////////////////////////////////////////////////////////// 我是tell方法 重写了tell方法
super
关键字强行调用父类的方法执行super
不一定在重写中使用,也可以表示那些方法时从父类继承而来
- 在构造子类的过程中必须调用其父类的构造方法
- 子类可以在自己的构造方法中使用
super(argument_list)
调用父类的构造方法,使用this(argument_list)
调用本类的构造方法,如果调用super必须写在子类构造方法的第一行- 如果子类的构造方法中没有显示地调用父类构造方法,则系统默认调用父类的无参构造方法
- 如果子类构造方法中既没有显示地调用父类构造方法,而父类中又没有无参的构造方法,则编译错误
- 如以下例子,类BB继承自类AA,并重写了AA中的f方法。在new一个BB类的时候会默认调用父类的无参构造方法,之后再调用自己的构造方法,最后调用重写的方法
package com.hanqi.demo1; class AA{ protected void print(String s) { System.out.println(s); } AA(){ print("调用父类A的无参构造方法"); } public void f() { print("调用A的f()方法"); } } class BB extends AA{ BB(){ print("调用子类B的无参构造方法"); } public void f() { print("调用B的f()方法"); } } public class test07 { public static void main(String[] args) { BB b = new BB(); b.f(); } } /////////////////////////// 调用父类A的无参构造方法 调用子类B的无参构造方法 调用B的f()方法
class 类名称{ 类属性; 类方法; }
class
package com.hanqi.classdemo; class Person{ String name; int age; public void tell(){ System.out.println("姓名:"+name+"\n年龄"+age); } } public class classDemo1 { public static void main(String[] args) { Person zhangSan = null; //声明一个对象 zhangSan = new Person(); //为对象分配空间(实例化操作) // Person zhangSan = new Person(); } }
new
即可Person zhangSan = new Person();
new
之前,即只写了Person zhangSan = null;
,此时的对象还仅仅是一个栈内的变量(类似C中定义一个指针,指针还未指向任何内存空间)new
之后,JVM将从堆空间中开辟内存用来保存zhangSan对象的详细信息(new相当于C中的malloc)package com.hanqi.classdemo; class Person{ String name; int age; public void tell(){ System.out.println("姓名:"+name+"\n年龄:"+age); } } public class classDemo1 { public static void main(String[] args) { // Person zhangSan = null; //声明一个对象 // zhangSan = new Person(); //为对象分配空间(实例化操作) Person zhangSan = new Person(); zhangSan.name = "张三"; //对象赋值 zhangSan.age = 80; zhangSan.tell(); } }
姓名:张三 年龄:80
new
操作则会报错,错误为空指针异常
Exception in thread "main" java.lang.NullPointerException at com.hanqi.classdemo.classDemo1.main(classDemo1.java:16)
null.a;null.b
,必然会报错]\set
和get
方法,让这些私有属性被外部访问package com.hanqi.classdemo; class Person1{ private int age; private String name; public int getAge(){ return age; } public void setAge(int age){ if(age>=0 && age <=200){ //不满足该条件,则赋值操作无法进行 this.age = age; } } public String getName(){ return name; } public void setName(String name){ this.name = name; } public void tell(){ System.out.println("年龄:"+getAge()+"\n姓名:"+getName()); } } public class classDemo2 { public static void main(String[] args) { Person1 per = new Person1(); per.setAge(-80); //非法赋值,赋值无法完成 per.setAge(80); per.setName("张三"); per.tell(); } }
extends
关键字完成继承class 子类 extends 父类{ }
package com.hanqi.demo1; class Person{ private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Student extends Person{ // private int age; // private String Name; private int score; // public int getAge() { // return age; // } // public void setAge(int age) { // this.age = age; // } // public String getName() { // return Name; // } // public void setName(String name) { // Name = name; // } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void tell() { System.out.println("姓名:"+getName()+"\n年龄:"+getAge()); } public void tell1() { System.out.println("\n成绩:"+getScore()); } } public class test02 { public static void main(String[] args) { Student s = new Student(); s.setAge(20); s.setName("王八"); s.setScore(100); s.tell(); s.tell1(); } }
package com.hanqi.demo1; class People1{ private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Worker extends People1{ public void tell() { System.out.println("年龄:"+getAge()); } } class PetWorker extends Worker{ } public class test03 { public static void main(String[] args) { // TODO 自动生成的方法存根 Worker w = new Worker(); w.setAge(100); w.tell(); } }
package com.hanqi.classdemo; class Student{ public void tell(){ System.out.println("makabaka"); } } public class classDemo3 { public static void main(String[] args) { // Student stu = new Student(); // stu.tell(); new Student().tell(); //匿名对象,只使用一次 } }
访问修饰符 类名称(){ 程序语句; }
package com.hanqi.classdemo; class People{ //创建构造方法 public People(){ System.out.println("执行构造方法"); } } public class classDemo4 { public static void main(String[] args) { // TODO Auto-generated method stub People hanqi = new People(); } }
package com.hanqi.demo1; class People{ int age; String name; public People(int age, String name) { this.age = age; this.name = name; System.out.println("姓名:"+name+"\n年龄:"+age); } } public class test01 { public static void main(String[] args) { // TODO 自动生成的方法存根 People per = new People(28, "王大翠"); } }
package com.hanqi.demo1; class People{ int age; String name; public People(int age, String name) { this.age = age; this.name = name; System.out.println("姓名:"+name+"\n年龄:"+age); } public People(int age) { this.age = age; System.out.println("年龄:"+age); } } public class test01 { public static void main(String[] args) { // TODO 自动生成的方法存根 People per = new People(28); } } ///////////////////////////////////////////////////////////////////////////////////////////////////// 年龄:28
package com.hanqi.demo1; class Father{ private int age; private String name; public Father() { System.out.println("父类构造方法"); } } class Son extends Father{ public Son() { System.out.println("子类构造方法"); } } public class test04 { public static void main(String[] args) { // TODO 自动生成的方法存根 Son s = new Son(); } } ///////////////////////////////////////////////////////////////////////////////////////////////////// 父类构造方法 子类构造方法