ts 怎么在父类调用子类的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ts 怎么在父类调用子类的方法相关的知识,希望对你有一定的参考价值。
Object(protectd 方法在此类里),Person1 (默认继承Object), CloneDemo(用于测试)。你想在测试类里用Person1的对象p1,去调用其应继承的父类的clone()方法,因为Object和Person1 不在一个包里 ,所以编译出错。假设Object 和Person1在相同的包里,这是没问题的。
下面的程序,只涉及到两个类,Test 和Testson,你在Testson里调用其父类的protected 方法没有问题。这是正常的。 现在你再加一个类,把Testson稍微改一下,再试一下,就会出现上面的问题了。
给你代码试试:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* file name is:Test.java
*/
package t0;
public class Test
int a=1;
int b=1;
void say()
System.out.println("hello");
protected void result()
System.out.println(a+b);
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* filename is TestProtected.java
*/
package t1;
import t0.Test;
class Testson extends Test
int c=0;
void display()
result(); //不同包子类直接可见。
public class TestProtected
public static void main(String[] args)
Testson ts=new Testson();
ts.display();
//ts.result(); //编译报错.
参考技术A Object(protectd 方法在此类里),Person1 (默认继承Object), CloneDemo(用于测试)。
你想在测试类里用Person1的对象p1,去调用其应继承的父类的clone()方法,因为Object和Person1 不在一个包里 ,所以编译出错。假设Object 和Person1在相同的包里,这是没问题的。
下面的程序,只涉及到两个类,Test 和Testson,你在Testson里调用其父类的protected 方法没有问题。这是正常的。 现在你再加一个类,把Testson稍微改一下,再试一下,就会出现上面的问题了。
给你代码试试:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* file name is:Test.java
*/
package t0;
public class Test
int a=1;
int b=1;
void say()
System.out.println("hello");
protected void result()
System.out.println(a+b);
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* filename is TestProtected.java
*/
package t1;
import t0.Test;
class Testson extends Test
int c=0;
void display()
result(); //不同包子类直接可见。
public class TestProtected
public static void main(String[] args)
Testson ts=new Testson();
ts.display();
//ts.result(); //编译报错.
什么是多态
什么是多态:
多态就是父类指针指向子类指针。
什么意思呢?
首先,子类要继承父类
那么就子类可以调用父类的东西
相当于把父类的东西在子类复写了一遍
那么这个时候我在子类把在父类继承过来的的东西自己写一遍,并且改了继承过来方法里面的东西
这个时候我要调用父类的指针调用子类对象的方法,就会首先在子类里面查找,找到之后就打印出来,如果没有找到就会在父类里面查找,然后打印出来。
这里面如果子类自己增加方法,而父类没有,就不能调用,因为父类里面没有。
也就是说父类和子类的方法要一一对应。
父类可以增加方法,而子类自己增加,就算是自己增加,父类指针也不能调用新增的方法。
看下面的代码:
mian 函数
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Pig.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Animal *A =[Animal new];
A=[Pig new];
[A eat];
[A walk];
A=[Dog new];
[A eat];
[A walk];
return 0;
}
}
-------------------------------------------
动物的方法也就是父类
父类里面写的方法子类可以继承过去
#import <Foundation/Foundation.h>
@interface Animal : NSObject
-(void)eat;
-(void)walk;
@end
#import "Animal.h"
@implementation Animal
-(void)eat{
NSLog(@"吃东西");
}
-(void)walk;
{
NSLog(@"走路");
}
@end
---------------------------------
Pig类继承了动物类
#import "Animal.h"
@interface Pig : Animal //继承了Animal
@end
#import "Pig.h"
@implementation Pig
-(void)eat
{
NSLog(@"大口吃东西");
}
-(void)sleep;
{
NSLog(@"睡觉");
}
@end
-----------------------------------
以上是关于ts 怎么在父类调用子类的方法的主要内容,如果未能解决你的问题,请参考以下文章
尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法。